home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / inet / internet-drafts / draft-ietf-cat-dass-01.txt < prev    next >
Text File  |  1993-03-03  |  275KB  |  7,808 lines

  1.  
  2.  
  3. Network Working Group                              Charles Kaufman
  4. Internet Draft                       Digital Equipment Corporation
  5.  
  6.                                                   10 December 1992
  7.  
  8.  
  9.                                DASS
  10.  
  11.            Distributed Authentication Security Service
  12.  
  13. DRAFT
  14.  
  15. STATUS OF THIS MEMO
  16.  
  17. This document is an Internet Draft.  Internet Drafts are working 
  18. documents of the Internet Engineering Task Force (IETF), its Areas, 
  19. and its Working Groups. Note that other groups may also distribute
  20. working documents as Internet Drafts. 
  21.  
  22. Internet Drafts are draft documents valid for a maximum of six 
  23. months.    Internet Drafts may be updated, replaced, or obsoleted
  24. by other documents at any time.  It is not appropriate to use
  25. Internet Drafts as reference material or to cite them other than
  26. as a "working draft" or "work in progress."
  27.  
  28. Please check the I-D abstract listing contained in each Internet 
  29. Draft directory to learn the current status of this or any 
  30. other Internet Draft.
  31.  
  32. This DRAFT document specifies the Services, Interfaces,
  33. Operation, and Protocols of the DASS Authentication Service. The
  34. DASS Authentication Service is used by applications to strongly
  35. authenticate and establish shared keys with peer applications.
  36.  
  37. Distribution of this memo is unlimited.
  38.  
  39.  
  40. Contents:
  41.  
  42.  1    Introduction ................................................ 3
  43.  
  44.       1.1  What is DASS? .......................................... 3
  45.  
  46.       1.2  Central Concepts ....................................... 5
  47.  
  48.       1.3  What This Document Won't Tell You ..................... 12
  49.  
  50.       1.4  The Relationship between DASS and ISO Standards ....... 19
  51.  
  52.       1.5  An Authentication Walkthrough ......................... 22
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  Kaufman           Document Expiration: 10 June 1993        Page 1
  64.  
  65.  
  66.  
  67.  
  68.  Internet Draft                    DASS            9 December 1992
  69.  
  70.  
  71.  
  72.  2    Services Used .............................................. 27
  73.  
  74.       2.1  Time Service .......................................... 27
  75.  
  76.       2.2  Random Numbers ........................................ 28
  77.  
  78.       2.3  Naming Service ........................................ 28
  79.  
  80.  
  81.  
  82.  3    Services Provided .......................................... 39
  83.  
  84.       3.1  Certificate Contents .................................. 40
  85.  
  86.       3.2  Encrypted Private Key Structure ....................... 42
  87.  
  88.       3.3  Authentication Tokens ................................. 43
  89.  
  90.       3.4  Credentials ........................................... 45
  91.  
  92.       3.5  CA State .............................................. 49
  93.  
  94.       3.6  Data types used in the routines ....................... 50
  95.  
  96.       3.7  Error conditions ...................................... 51
  97.  
  98.       3.8  Certificate Maintenance Functions ..................... 52
  99.  
  100.       3.9  Credential Maintenance Functions ...................... 57
  101.  
  102.       3.10 Authentication Procedures ............................. 65
  103.  
  104.       3.11 DASSlessness Determination Functions .................. 89
  105.  
  106.  
  107.  
  108.  4    Certificate and message formats ............................ 91
  109.  
  110.       4.1  ASN.1 encodings ....................................... 91
  111.  
  112.       4.2  Encoding Rules ........................................ 98
  113.  
  114.       4.3  Version numbers and forward compatibility ............. 99
  115.  
  116.       4.4  Cryptographic Encodings ............................... 99
  117.  
  118.  
  119.  
  120.  Annex A - Typical Usage ........................................ 104
  121.  
  122.       A.1  Creating a CA ........................................ 104
  123.  
  124.  
  125.  
  126.  
  127.  Kaufman           Document Expiration: 10 June 1993        Page 2
  128.  
  129.  
  130.  
  131.  
  132.  Internet Draft                    DASS            9 December 1992
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.       A.2  Creating a User Principal ............................ 105
  140.  
  141.       A.3  Creating a Server Principal .......................... 105
  142.  
  143.       A.4  Booting a Server Principal ........................... 106
  144.  
  145.       A.5  A user logs on to the network ........................ 106
  146.  
  147.       A.6  An Rlogin (TCP/IP) connection is made ................ 106
  148.  
  149.       A.7  A Transport-Independent Connection ................... 107
  150.  
  151.  
  152.  
  153.  Annex B - Support of the GSSAPI ................................ 108
  154.  
  155.       B.1  Summary of GSSAPI .................................... 108
  156.  
  157.       B.2  Implementation of GSSAPI over DASS ................... 109
  158.  
  159.       B.3  Syntax ............................................... 109
  160.  
  161.  
  162.  Annex C - Imported ASN.1 definitions ........................... 116
  163.  
  164.  
  165.  Glossary ....................................................... 119
  166.  
  167.  
  168.  
  169.  
  170. Figures
  171.  
  172.  Figure 1 - Authentication Exchange Overview ....................  26
  173.  
  174.  
  175.  
  176.  
  177.  
  178. 1 Introduction
  179.  
  180. 1.1 What is DASS?
  181.  
  182. Authentication is a security service. The goal of authentication
  183. is to reliably learn the name of the originator of a message or
  184. request. The classic way by which people authenticate to
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  Kaufman           Document Expiration: 10 June 1993        Page 3
  192.  
  193.  
  194.  
  195.  
  196.  Internet Draft                    DASS            9 December 1992
  197.  
  198.  
  199.  
  200.  
  201. computers (and by which computers authenticate to one another) is
  202. by supplying a password.  There are a number of problems with
  203. existing password based schemes which DASS attempts to solve.
  204. The goal of DASS is to provide authentication services in a
  205. distributed environment which are both more secure (more
  206. difficult for a bad guy to impersonate a good guy) and easier to
  207. use than existing mechanisms.
  208.  
  209. In a distributed environment, authentication is particularly
  210. challenging.  Users do not simply log on to one machine and use
  211. resources there.  Users start processes on one machine which may
  212. request services on another.  In some cases, the second system
  213. must request services from a third system on behalf of the user.
  214. Further, given current network technology, it is fairly easy to
  215. eavesdrop on conversations between computers and pick up any
  216. passwords that might be going by.
  217.  
  218. DASS uses cryptographic mechanisms to provide "strong, mutual"
  219. authentication.  Mutual authentication means that the two parties
  220. communicating each reliably learn the name of the other.  Strong
  221. authentication means that in the exchange neither obtains any
  222. information that it could use to impersonate the other to a third
  223. party.  This can't be done with passwords alone.  Mutual
  224. authentication can be done with passwords by having a "sign" and
  225. a "counter-sign" which the two parties must utter to assure one
  226. another of their identities.  But whichever party speaks first
  227. reveals information which can be used by the second
  228. (unauthenticated) party to impersonate it.  Longer sequences
  229. (often seen in spy movies) cannot solve the problem in general.
  230. Further, anyone who can eavesdrop on the conversation can
  231. impersonate either party in a subsequent conversation (unless
  232. passwords are only good once).  Cryptography provides a means
  233. whereby one can prove knowledge of a secret without revealing it.
  234. People cannot execute cryptographic algorithms in their heads,
  235. and thus cannot strongly authenticate to computers directly.
  236. DASS lays the groundwork for "smart cards": microcomputers sealed
  237. in credit cards which when activated by a PIN will strongly
  238. authenticate to a computer.  Until smart cards are available, the
  239. first link from a user to a DASS node remains vulnerable to
  240. eavesdropping.  DASS mechanisms are constructed so that after the
  241. initial authentication, smart card or password based
  242. authentication looks the same.
  243.  
  244. Today,  systems are constructed to think of user identities in
  245. terms of accounts on individual computers.  If I have accounts on
  246. ten machines, there is no way a priori to see that those ten
  247. accounts all belong to the same individual.  If I want to be able
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  Kaufman           Document Expiration: 10 June 1993        Page 4
  256.  
  257.  
  258.  
  259.  
  260.  Internet Draft                    DASS            9 December 1992
  261.  
  262.  
  263.  
  264.  
  265. to access a resource through any of the ten machines, I must tell
  266. the resource about all ten accounts.  I must also tell the
  267. resource when I get an eleventh account.
  268.  
  269. DASS supports the concept of global identity and network login.
  270. A user is assigned a name from a global namespace and that name
  271. will be recognized by any node in the network.  (In some cases, a
  272. resource may be configured as accessible only by a particular
  273. user acting through a particular node.  That is an access control
  274. decision, and it is supported by DASS, but the user is still
  275. known by his global identity).  From a practical point of view,
  276. this means that a user can have a single password (or smart card)
  277. which can be used on all systems which allow him access and
  278. access control mechanisms can conveniently give access to a user
  279. through any computer the user happens to be logged into.  Because
  280. a single user secret is good on all systems, it should never be
  281. necessary for a user to enter a password other than at initial
  282. login.  Because cryptographic mechanisms are used, the password
  283. should never appear on the network beyond the initial login node.
  284.  
  285. DASS was designed as a component of the Distributed System
  286. Security Architecture (DSSA) (see "The Digital Distributed System
  287. Security Architecture" by M. Gasser, A. Goldstein, C. Kaufman,
  288. and B. Lampson, 1989 National Computer Security Conference).  It
  289. is a goal of DSSA that access control on all systems be based on
  290. users' global names and the concept of "accounts" on computers
  291. eventually be replaced with unnamed rights to execute processes
  292. on those computers.  Until this happens, computers will continue
  293. to support the concept of "local accounts" and access controls on
  294. resources on those systems will still be based on those accounts.
  295. There is today within the Berkeley rtools running over the
  296. Internet Protocol suite the concept of a ".rhosts database" which
  297. gives access to local accounts from remote accounts.  We envision
  298. that those databases will be extended to support granting access
  299. to local accounts based on DASS global names as a bridge between
  300. the past and the future.  DASS should greatly simplify the
  301. administration of those databases for the (presumably common)
  302. case where a user should be granted access to an account ignoring
  303. his choice of intermediate systems.
  304.  
  305. 1.2 Central Concepts
  306.  
  307. 1.2.1 Strong Authentication with Public Keys
  308.  
  309. DASS makes heavy use of the RSA Public Key cryptosystem.  The
  310. important properties of the RSA algorithms for purposes of this
  311. discussion are:
  312.  
  313.  - It supports the creation of a public/private key pair, where
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  Kaufman           Document Expiration: 10 June 1993        Page 5
  320.  
  321.  
  322.  
  323.  
  324.  Internet Draft                    DASS            9 December 1992
  325.  
  326.  
  327.  
  328.  
  329.    operations with one key of the pair reverse the operations of
  330.    the other, but it is computationally infeasible to derive the
  331.    private key from the public key.
  332.  
  333.  - It supports the "signing" of a message with the private key,
  334.    after which anyone knowing the public key can "verify" the
  335.    signature and know that it was constructed with knowledge of
  336.    the private key and that the message was not subsequently
  337.    altered.
  338.  
  339.  - It supports the "enciphering" of a message by anyone knowing
  340.    the public key such that only someone with knowledge of the
  341.    private key can recover the message.
  342.  
  343. With access to the RSA algorithms, it is easy to see how one
  344. could construct a "strong" authentication mechanism.  Each
  345. "principal" (user or computer) would construct a public/private
  346. key pair, publish the public key, and keep secret the private
  347. key.  To authenticate to you, I would write a message, sign it
  348. with my private key, and send it to you.  You would verify the
  349. message using my public key and know the message came from me.
  350. If mutual authentication were desired, you could create an
  351. acknowledgment and sign it with your private key; I could verify
  352. it with your public key and I would know you received my message.
  353.  
  354. The authentication algorithms used by DASS are considerably more
  355. complex than those described in the paragraph above in order to
  356. deal with a large number of practical concerns including subtle
  357. security threats.  Some of these are discussed below.
  358.  
  359. 1.2.2 Timestamps vs. Challenge/Response
  360.  
  361. Cryptosystems give you the ability to sign messages so that the
  362. receiver has assurance that the signer of the message knew some
  363. cryptographic secret.  Free-standing public key based
  364. authentication is sufficiently expensive that it is unlikely that
  365. anyone would want to sign every message of an interactive
  366. communication, and even if they did they would still face the
  367. threat of someone rearranging the messages or playing them
  368. multiple times.  Authentication generally takes place in the
  369. context of establishing some sort of "connection," where a
  370. conversation will ensue under the auspices of the single
  371. peer-entity authentication.  This connection might be
  372. cryptographically protected against modification or reordering of
  373. the messages, but any such protection would be largely
  374. independent of the authentication which occurred at the start of
  375. the connection.  DASS provides as a side effect of authentication
  376. the provision of a shared key which may be used for this purpose.
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  Kaufman           Document Expiration: 10 June 1993        Page 6
  384.  
  385.  
  386.  
  387.  
  388.  Internet Draft                    DASS            9 December 1992
  389.  
  390.  
  391.  
  392.  
  393. If in our simple minded authentication above, I signed the
  394. message "It's really me!" with my private key and sent it to you,
  395. you could verify the signature and know the message came from me
  396. and give the connection in which this message arrived access to
  397. my resources.  Anyone watching this message over the network,
  398. however, could replay it to any server (just like a password!)
  399. and impersonate me.  It is important that the message I send you
  400. only be accepted by you and only once.  I can prevent the message
  401. from being useful at any other server by including your name in
  402. the message.  You will only accept the message if you see your
  403. name in it.  Keeping you from accepting the message twice is
  404. harder.
  405.  
  406. There are two "standard" ways of providing this replay
  407. protection.  One is called challenge/response and the other is
  408. called timestamp-based.  In a challenge response type scheme, I
  409. tell you I want to authenticate, you generate a "challenge"
  410. (generally a number), and I include the challenge in the message
  411. I sign.  You will only accept a message if it contains the
  412. recently generated challenge and you will make sure you never
  413. issue the same challenge to me twice (either by using a sequence
  414. number, a timestamp, or a random number big enough that the
  415. probability of a duplicate is negligible).  In the
  416. timestamp-based scheme, I include the current time in my message.
  417. You have a rule that you will not accept messages more than - say
  418. - five minutes old and you keep track of all messages you've seen
  419. in the last five minutes.  If someone replays the message within
  420. five minutes, you will reject it because you will remember you've
  421. seen it before; if someone replays it after five minutes, you
  422. will reject it as timed out.
  423.  
  424. The disadvantage of the challenge/response based scheme is that
  425. it requires extra messages.  While one-way authentication could
  426. otherwise be done with a single message and mutual authentication
  427. with one message in each direction, the challenge/response scheme
  428. always requires at least three messages.
  429.  
  430. The disadvantage of the timestamp-based scheme is that it
  431. requires secure synchronized time.  If our clocks drift apart by
  432. more than five minutes, you will reject all of my attempts to
  433. authenticate.  If a network time service spoofer can convince you
  434. to turn back your clock and then subsequently replays an expired
  435. message, you will accept it again.  The multicast nature of
  436. existing distributed time services and the likelihood of
  437. detection make this an unlikely threat, but it must be considered
  438. in any analysis of the security of the scheme.  The timestamp
  439. scheme also requires the server to keep state about all messages
  440. seen in the clock skew interval.  To be secure, this must be kept
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  Kaufman           Document Expiration: 10 June 1993        Page 7
  448.  
  449.  
  450.  
  451.  
  452.  Internet Draft                    DASS            9 December 1992
  453.  
  454.  
  455.  
  456.  
  457. on stable storage (unless rebooting takes longer than the
  458. permitted clock skew interval).
  459.  
  460. DASS uses the timestamp-based scheme.  The primary motivations
  461. behind this decision were so that authentication messages could
  462. be "piggybacked" on existing connection establishment messages
  463. and so that DASS would fit within the same "form factor" (number
  464. and direction of messages) as Kerberos.
  465.  
  466. 1.2.3 Delegation
  467.  
  468. In a distributed environment, authentication alone is not enough.
  469. When I log onto a computer, not only do I want to prove my
  470. identity to that computer, I want to use that computer to access
  471. network resources (e.g. file systems, database systems) on my
  472. behalf.  My files should (normally) be protected so that I can
  473. access them through any node I log in through.  DASS allows them
  474. to be so protected without allowing all of the systems that I
  475. might ever use to access those files in my absence.  In the
  476. process of logging in, my password gives my login node access to
  477. my RSA secret.  It can use that secret to "impersonate" me on any
  478. requests it makes on my behalf.  It should forget all secrets
  479. associated with me when I log off.  This limits the trust placed
  480. in computer systems.  If someone takes control of a computer,
  481. they can impersonate all people who use that computer after it is
  482. taken over but no others.
  483.  
  484. Normally when I access a network service, I want to strongly
  485. authenticate to it.  That is, I want to prove my identity to that
  486. service, but I don't want to allow that service to learn anything
  487. that would allow it to impersonate me.  This allows me to use a
  488. service without trusting it for more than the service it is
  489. delivering.  When using some services, for example remote login
  490. services, I may want that service to act on my behalf in calling
  491. additional services.  DASS provides a mechanism whereby I can
  492. pass secrets to such services that allow them to impersonate me.
  493.  
  494. Future versions of this architecture may allow "limited
  495. delegation" so that a user may delegate to a server only those
  496. rights the server needs to carry out the user's wishes.  This
  497. version  can limit delegation only in terms of time.  The
  498. information a user gives a server (other than the initial login
  499. node) can be used to impersonate the user but only for a limited
  500. period of time.  Smart cards will permit that time limitation to
  501. apply to the initial login node as well.
  502.  
  503. 1.2.4 Certification Authorities
  504.  
  505. A flaw in the strong authentication mechanism described above is
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  Kaufman           Document Expiration: 10 June 1993        Page 8
  512.  
  513.  
  514.  
  515.  
  516.  Internet Draft                    DASS            9 December 1992
  517.  
  518.  
  519.  
  520.  
  521. that it assumes that every "principal" (user and node) knows the
  522. public key of every other principal it wants to authenticate.  If
  523. I can fool a server into thinking my public key is actually your
  524. public key, I can impersonate you by signing a message, saying it
  525. is from you, and having the server verify the message with what
  526. it thinks is your public key.
  527.  
  528. To avoid the need to securely install the public key of every
  529. principal in the database of every other principal, the concept
  530. of a "Certification Authority" was invented.  A certification
  531. authority is a principal trusted to act as an introduction
  532. service.  Each principal goes to the certification authority,
  533. presents its public key, and proves it has a particular name (the
  534. exact mechanisms for this vary with the type of principal and the
  535. level of security to be provided).  The CA then creates a
  536. "certificate" which is a message containing the name and public
  537. key of the principal, an expiration date, and bookkeeping
  538. information signed by the CA's private key.  All "subscribers" to
  539. a particular CA can then authenticated to one another by
  540. presenting their certificates and proving knowledge of the
  541. corresponding secret.  CAs need only act when new principals are
  542. being named and new private keys created, so that can be
  543. maintained under tight physical security.
  544.  
  545. The two problems with the scheme as described so far are
  546. "revocation" and "scaleability".
  547.  
  548. 1.2.4.1 Certificate Revocation
  549.  
  550. Revocation is the process of announcing that a key has (or may
  551. have) fallen into the wrong hands and should no longer be
  552. accepted as proof of some particular identity.  With certificates
  553. as described above, someone who learns your secret and your
  554. certificate can impersonate you indefinitely - even after you
  555. have learned of the compromise.  It lacks the ability
  556. corresponding to changing your password.  DASS supports two
  557. independent mechanisms for revoking certificates. In the future,
  558. a third may be added.
  559.  
  560.  One method for revocation is using timeouts and renewals of
  561. certificates.  Part of the signed message which is a certificate
  562. may be a time after which the certificate should not be believed.
  563. Periodically, the CA would renew certificates by signing one with
  564. a later timeout.  If a key were compromised, a new key would be
  565. generated and a new certificate signed.  The old certificate
  566. would only be valid until its timeout.  Timeouts are not perfect
  567. revocation mechanisms because they provide only slow revocation
  568. (timeouts are typically measured in months for the load on the CA
  569. and communication with users to be kept manageable) and they
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  Kaufman           Document Expiration: 10 June 1993        Page 9
  576.  
  577.  
  578.  
  579.  
  580.  Internet Draft                    DASS            9 December 1992
  581.  
  582.  
  583.  
  584.  
  585. depend on servers having an accurate source of the current time.
  586. Someone who can trick a server into turning back its clock can
  587. use expired certificates.
  588.  
  589. The second method is by listing all non-revoked certificates in
  590. the naming service and believing only certificates found there.
  591. The advantage of this method is that it is almost immediate (the
  592. only delay is for name service "skulking" and caching delays).
  593. The disadvantages are: (1) the availability of authentication is
  594. only as good as the availability of the naming service and (2)
  595. the security of revocation is only as good as the security of the
  596. naming service.
  597.  
  598. A third method for revocation - not currently supported by DASS -
  599. is for certification authorities to periodically issue
  600. "revocation lists" which list certificates which should no longer
  601. be accepted.
  602.  
  603. 1.2.4.2 Certification Authority Hierarchy
  604.  
  605. While using a certification authority as an introduction service
  606. scales much better than having every principal learn the public
  607. key of every other principal by some out of band means, it has
  608. the problem that it creates a central point of trust.  The
  609. certification authority can impersonate any principal by
  610. inventing a new key and creating a certificate stating that the
  611. new key represents the principal.  In a large organization, there
  612. may be no individual who is sufficiently trusted to operate the
  613. CA.  Even if there were, in a large organization it would be
  614. impractical to have every individual authenticate to that single
  615. person.  Replicating the CA solves the availability problem but
  616. makes the trust problem worse.  When authentication is to be used
  617. in a global context - between companies - the concept of a single
  618. CA is untenable.
  619.  
  620. DASS addresses this problem by creating a hierarchy of CAs.  The
  621. CA hierarchy is tied to the naming hierarchy.  For each directory
  622. in the namespace, there is a single CA responsible for certifying
  623. the public keys of its members.  That CA will also certify the
  624. public keys of the CAs of all child directories and of the CA of
  625. the parent directory.  With this cross-certification, it is
  626. possible knowing the public key of any CA to verify the public
  627. keys of a series of intermediate CAs and finally to verify the
  628. public key of any principal.
  629.  
  630. Because the CA hierarchy is tied to the naming hierarchy, the
  631. trust placed in any individual CA is limited.  If a CA is
  632. compromised, it can impersonate any of the principals listed in
  633. its directory, but it cannot impersonate arbitrary prinqcipals.
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  Kaufman           Document Expiration: 10 June 1993       Page 10
  640.  
  641.  
  642.  
  643.  
  644.  Internet Draft                    DASS            9 December 1992
  645.  
  646.  
  647.  
  648.  
  649. DASS provides mechanisms for every principal to know the public
  650. key of its "parent" CA - the CA controlling the directory in
  651. which it is named.  The result is the following rules for the
  652. implications of a compromised CA:
  653.  
  654.  a)A CA can impersonate any principal named in its directory.
  655.  
  656.  b)A CA can impersonate any principal to a server named in its
  657.    directory.
  658.  
  659.  c)A CA can impersonate any principal named in a subdirectory to
  660.    any server not named in the same subdirectory.
  661.  
  662.  d)A CA can impersonate to any server in a subdirectory any
  663.    principal not named in the same subdirectory.
  664.  
  665. The implication is that a compromise low in the naming tree will
  666. compromise all principals below that directory while a compromise
  667. high in the naming tree will compromise only the authentication
  668. of principals far apart in the naming hierarchy.  In particular,
  669. when multiple organizations share a namespace (as they do in the
  670. case of X.500), the compromise of a CA in one organization can
  671. not result in false authentication within another organization.
  672.  
  673. DASS uses the X.500 directory hierarchy for principal naming.  At
  674. the top of the hierarchy are names of countries.  National
  675. authorities are not expected to establish certification
  676. authorities (at least initially), so an alternative mechanism
  677. must be used to authenticate entities "distant" in the naming
  678. hierarchy.  The mechanism for this in DASS is the
  679. "cross-certificate" where a CA certifies the public key for some
  680. CA or principal not its parent or child.  By limiting the chains
  681. of certificates they will use to parent certificates followed by
  682. a single "cross certificate" followed by child certificates, a
  683. DASS implementation can avoid the need to have CAs near the root
  684. of the tree or can avoid the requirement to trust them even if
  685. they do exist.  A special case can also be supported whereby a
  686. global authority whose name is not the root can certify the local
  687. roots of independent "islands".
  688.  
  689. 1.2.5 User vs. Node Authentication
  690.  
  691. In concept, DASS mechanisms support the mutual authentication of
  692. two principals regardless of whether those principals are people,
  693. computers, or applications.  Those mechanisms have been extended,
  694. however, to deal with a common case of a pair of principals
  695. acting together (a user and a node) authenticating to a single
  696. principal (a remote server).  This is done by having optionally
  697. in each credentials structure two sets of secrets - one for the
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  Kaufman           Document Expiration: 10 June 1993       Page 11
  704.  
  705.  
  706.  
  707.  
  708.  Internet Draft                    DASS            9 December 1992
  709.  
  710.  
  711.  
  712.  
  713. user and one for the node.  When authentication is done using
  714. such credentials, both secrets sign the request so the receiving
  715. party can verify that both principals are present.
  716.  
  717. This setup has a number of advantages.  It permits access
  718. controls to be enforced based on both the identity of the user
  719. and the identity of the originating node.  It also makes it
  720. possible to define users of systems who have no network wide
  721. identities who can access network resources on the basis of node
  722. credentials alone.  The security of such a setup is less because
  723. a node can impersonate all of its users even when they are not
  724. logged in, but it offers an easier transition from existing
  725. .rhosts based mechanisms because it does not require creation of
  726. global identities for all users.
  727.  
  728. 1.2.6 Protection of User Keys
  729.  
  730. DASS mechanisms generally deal with authentication between
  731. principals each knowing a private key.  For principals who are
  732. people, special mechanisms are provided for maintaining that
  733. private key.  In particular, it many cases it will be most
  734. convenient to keep passwords as secrets rather than private keys.
  735. This architecture specifies a means of storing private keys
  736. encrypted under passwords.  This would provide security as good
  737. as hiding a private key were it not that people tend to choose
  738. passwords from a small space (like words in a dictionary) such
  739. that a password can be more easily guessed than a private key.
  740. To address this potential weakness, DASS specifies a protocol
  741. between a login node and a login agent whereby the login agent
  742. can audit and limit the rate of password guesses.  Use of these
  743. features is optional.  A user with a smart card could store a
  744. private key directly and bypass all of these mechanisms.  If
  745. users can be forced to choose "good" passwords, the login agent
  746. could be eliminated and encrypted credentials could be stored
  747. directly in the naming service.
  748.  
  749. Another way in which user keys are protected is that the
  750. architecture does not require that they be available except
  751. briefly at login.  This reduces the threat of a user walking away
  752. from a logged on workstation and having someone take over the
  753. workstation and extract his key.  It also makes the use of RSA
  754. based smart cards practical; the card could keep the user's
  755. private key and execute one signature operation at login time to
  756. authenticate an entire session.
  757.  
  758. 1.3 What This Document Won't Tell You
  759.  
  760. Architecture documents are by their nature difficult to read.
  761. This one is no exception. The reason is that an architecture
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  Kaufman           Document Expiration: 10 June 1993       Page 12
  768.  
  769.  
  770.  
  771.  
  772.  Internet Draft                    DASS            9 December 1992
  773.  
  774.  
  775.  
  776.  
  777. document contains the details sufficient to build interoperable
  778. implementations, but it is not a design specification. It goes
  779. out of its way to leave out any details which an implementation
  780. could choose without affecting interoperability. It also does not
  781. specify all the uses of the services provided because these
  782. services are properly regarded as general purpose tools.
  783.  
  784. The remainder of this section includes information which is not
  785. properly part of the authentication architecture, but which may
  786. be useful in understanding why the architecture is the way it is.
  787.  
  788. 1.3.1 How DASS is Embedded in an Operating System
  789.  
  790. While architecturally DASS does not require any operating system
  791. support in order to be used by an application (other than the
  792. services listed in Section 2), it is expected that actual
  793. implementations of DASS will be closely tied to the operating
  794. systems of host computers.  This is done both for security and
  795. for convenience.
  796.  
  797. In particular, it is expected that when a user logs into a node,
  798. a set of credentials will be created for that user and then
  799. associated by the operating system with all processes initiated
  800. by or on behalf of the user.  When a user delegates to a service,
  801. the remote operating system is expected to accept the delegation
  802. and start up the remote process with the delegated credentials.
  803. Most nodes are expected to have credentials of their own and
  804. support the concept of user accounts.  When user credentials are
  805. created, the node is expected to verify them in its own context,
  806. determine the appropriate user account, and add node credentials
  807. to the created credentials set.
  808.  
  809. 1.3.2 Forms of Credentials
  810.  
  811. In the DASS architecture, there is a single data structure called
  812. "Credentials" with a large number of optional parts.  In an
  813. implementation, it is possible that not all of the
  814. architecturally allowed subsets will be supported and credentials
  815. structures with different subsets of the data may be implemented
  816. quite differently.
  817.  
  818. The major categories of credentials likely to be supported in an
  819. implementation are:
  820.  
  821.  - Claimant credentials  - these are the credentials which would
  822.    normally be associated with a user process in order that it be
  823.    able to create authentication tokens.  It would contain the
  824.    user's name, login ticket, session private key, and (at least
  825.    logically) local node credentials and cached outgoing
  826.    contexts.
  827.  
  828.  
  829.  
  830.  
  831.  Kaufman           Document Expiration: 10 June 1993       Page 13
  832.  
  833.  
  834.  
  835.  
  836.  Internet Draft                    DASS            9 December 1992
  837.  
  838.  
  839.  
  840.  
  841.  - Verifier credentials -  these are the credentials which would
  842.    normally be associated with a server which must verify tokens
  843.    and produce mutual authentication response tokens.  Since
  844.    servers may be started by a node on demand, some
  845.    representation of verifier credentials must exist independent
  846.    of a process.  If an operating system wishes to authenticate a
  847.    request before starting a server process, the credentials must
  848.    exist in usable form.  An implementation may choose to have
  849.    all services on a "node" share a verifier credentials
  850.    structure, or it may choose to have each service have its own.
  851.  
  852.  - Combined credentials - architecturally, a server may have a
  853.    structure which is both claimant credentials and verifier
  854.    credentials combined so that the server may act in either role
  855.    using a single structure.  There is some overlap in the
  856.    contents.  There is no requirement, however, that an
  857.    implementation support such a structure.
  858.  
  859.  - Stub credentials - In the architecture, a credentials
  860.    structure is created whenever a token is accepted.  If delegation
  861.    took place, these are   claimant credentials  usable by their
  862.    possessor to create additional tokens.  If no delegation took
  863.    place, this structure exists as an architectural place holder
  864.    against which an implementation may attempt to authenticate
  865.    user and node names.  An implementation might choose to
  866.    implement  stub credentials  with a different mechanism than
  867.    claimant or verifier credentials.  In particular, it might do
  868.    whatever user and node authentication is useful itself and not
  869.    support this structure at all.
  870.  
  871. 1.3.3 Support for Alternative Certification Authority
  872.     Implementations
  873.  
  874. A motivating factor in much of the design of DASS is the need to
  875. protect certification authorities from compromise. CAs are only
  876. used to create certificates for new principals and to renew them
  877. on expiration (expiration intervals are likely to be measured in
  878. months). They therefore do not need to be highly available. For
  879. maximum security, CAs could be implemented on standalone PCs
  880. where the hardware, software, and keys can be locked in a safe
  881. when the CA is not in use. The certificates the CA generates must
  882. be delivered to the naming service to be registered, and a
  883. possible mechanism for this is for the CA to have an RS232 line
  884. to an on-line component which can pass certificates and related
  885. information but not login sessions. The intent would be to make
  886. it implausible to mount a network attack against the CA.
  887. Alternatively, certificates could be carried to the network on a
  888. floppy disk.
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  Kaufman           Document Expiration: 10 June 1993       Page 14
  896.  
  897.  
  898.  
  899.  
  900.  Internet Draft                    DASS            9 December 1992
  901.  
  902.  
  903.  
  904.  
  905. For CAs to be secure, a whole host of design details must be done
  906. right. The most important of these is the design of user and
  907. system manager interfaces that make it difficult to "trick" a
  908. user or system manager into doing the wrong thing and certifying
  909. an impostor or revealing a key. Mechanisms for generating keys
  910. must also be carefully protected to assure that the generated key
  911. cannot be guessed (because of lack of randomness) and is not
  912. recorded where a penetrator can get it. Because a certificate
  913. contains relatively little human intelligible information (its
  914. most important components are UIDs and public keys), it will be a
  915. challenge to design a user interface that assures the human operator
  916. only authorizes the signing of intented certificates. Such
  917. considerations are beyond the scope of the architecture (since
  918. they do not affect interoperability), but they did affect the
  919. design in subtle ways.  In particular, it does not assume uniform
  920. security throughout the CA hierarchy and is designed to assure
  921. that the compromise of a CA in one part of the hierarchy does not
  922. have global implications.
  923.  
  924. The architecture does not require that CAs be off-line. The CA
  925. could be software that can run on any node when the proper secret
  926. is installed.  Administrative convenience can be gained by
  927. integrating the CA with account registration utilities and naming
  928. service maintenance. As such, the CA would have to be on-line
  929. when in use in order to register certificates in the naming
  930. service.  The CA key could be unlocked with a password and the
  931. password could be entered on each use both to authenticate the CA
  932. operator and to assure that compromise of the host node while the
  933. CA is not in use will not compromise the CA.  This design would
  934. be subject to attacks based on planting Trojan horses in the CA
  935. software, but is entirely interoperable with a more secure
  936. implementation.  Realistic tradeoffs must be made between
  937. security, cost, and administrative convenience bearing in mind
  938. that a system is only as secure as its weakest link and that
  939. there is no benefit in making the CA substantially more secure
  940. than the other components of the system.
  941.  
  942. 1.3.4 Services Provided vs. Application Program Interface
  943.  
  944. Section 3 of this document specifies "abstract interfaces" to the
  945. services provided by DASS. This means it tells what services are
  946. provided, what parameters are supplied by the caller, and what
  947. data is returned. It does not specify the calling interfaces.
  948. Calling interfaces may be platform, operating system, and
  949. language dependent. They do not affect interoperability;
  950. different implementations which implement completely different
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  Kaufman           Document Expiration: 10 June 1993       Page 15
  960.  
  961.  
  962.  
  963.  
  964.  Internet Draft                    DASS            9 December 1992
  965.  
  966.  
  967.  
  968.  
  969. calling interfaces can still interoperate over a network. They
  970. do, however, affect portability. A program which runs on one
  971. platform can only run on another which implements an identical
  972. API.
  973.  
  974. In order to support portability of applications - not just
  975. between implementations of DASS but between implementations of
  976. DASS and implementations of Kerberos - a "Generic Security
  977. Service API" has been designed and is outlined in Annex B. This
  978. API could be the only "published" interface to DASS services.
  979. This interface does not, however, give access to all the
  980. functions provided by DASS and it provides some non-DASS
  981. services. It does not give access to the "login" service, for
  982. example, so the login function cannot be implemented in a
  983. portable way. Clearly an implementation must provide some
  984. implementation of the login function, though perhaps only to one
  985. system program and the implementation need not be portable.
  986. Similarly, the Generic API provides no access to node authentication
  987. information, so applications which use these services may not be
  988. portable.
  989.  
  990. The Generic API provides services for encryption of user data for
  991. integrity and possibly privacy. These services are not specified
  992. as a part of the DASS architecture. This is because we envisioned
  993. that such services would be provided by the communications
  994. network and not in applications. These services are provided by
  995. the Generic API because these services are provided by Kerberos,
  996. there exist applications which use these services, and they are
  997. desired in the context of the IETF-CAT work. The DASS
  998. architecture includes a Key Distribution service so that the
  999. encryption functions of the Generic API can be supported and
  1000. integrated. Annex B specifies how those services can be implemented
  1001. using DASS services.
  1002.  
  1003. The Services Provided also differ from the GSSAPI because there
  1004. are important extensions envisioned to the API for future
  1005. applications and it was important to assure that architecturally
  1006. those services were available.  In particular, DASS provides the
  1007. ability for a principal to have multiple aliases and for the
  1008. receiver of an authentication token to verify any one of them.
  1009. We want DASS to support the case where a server only learns the
  1010. name it is trying to validate in the course of evaluating an ACL.
  1011. This may be long after a connection is accepted.  The Services
  1012. Provided section therefore separates the Accept_token function
  1013. from the Verify Principal Name.  The other motivation behind a
  1014. different interface is that DASS provides node authentication -
  1015. the ability to authenticate the node from which a request
  1016. originates as well as the user.  Because Kerberos provides no
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  Kaufman           Document Expiration: 10 June 1993       Page 16
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  Internet Draft                    DASS            9 December 1992
  1029.  
  1030.  
  1031.  
  1032.  
  1033. such mechanism, the capability is missing from the GSSAPI, but we
  1034. expect some applications will want to make use of it.
  1035.  
  1036. 1.3.5 Use of a Naming Service
  1037.  
  1038. With the exception of the syntactical representation of names,
  1039. which is tied to X.500, the DASS architecture is designed to be
  1040. independent of the particular underlying naming service.  While
  1041. the intention is that certificates be stored in an X.500 naming
  1042. service in the fields architecturally reserved for this purpose
  1043. in the standard, this specification allows for the possibility of
  1044. different forms of certificate stores.  The SPX implementation of
  1045. DASS implements its own certificate distribution service because
  1046. we did not want to introduce a dependency on an X.500 naming
  1047. service.
  1048.  
  1049. 1.3.6 Key Hiding - Credentials
  1050.  
  1051. The abstract interfaces described in section 3 specify that
  1052. "credentials" and "keys" are the inputs and outputs of various
  1053. routines.  Credentials structures in particular contain secret
  1054. information which should not be made available to the calling
  1055. application.  In most cases, keeping this information from
  1056. applications is simply a matter of prudence - a misbehaving
  1057. application can do nearly as much damage using the credentials as
  1058. it can by using the secrets directly.  Having access to the keys
  1059. themselves may allow an application to bypass auditing or leak a
  1060. key to an accomplice who can use it on another node where a large
  1061. amount of activity is less likely to be noticed.  In some cases,
  1062. most dramatically where a "node key" is present in user
  1063. credentials, it is vital that the contents of the credentials be
  1064. kept out of the hands of applications.
  1065.  
  1066. To accomplish this, a concrete interface is expected to create
  1067. "credentials handles" that are passed in and out of DASS
  1068. routines.  The credentials themselves would be kept in some
  1069. portion of memory where unprivileged code can't get at them.
  1070.  
  1071. There is another aspect of the way credentials are used which is
  1072. important to the design of real implementations.  In normal use,
  1073. a user will create a set of credentials in the process of logging
  1074. on to a system and then use them from many processes or jobs.
  1075. When many processes share a set of credentials, it is important
  1076. for the sake of performance that they share one set of
  1077. credentials rather than having a copy of the credentials made for
  1078. each.  This is because information is cached in credentials as a
  1079. side effect of some requests and for good performance those
  1080. caches should be shared.
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  Kaufman           Document Expiration: 10 June 1993       Page 17
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  Internet Draft                    DASS            9 December 1992
  1093.  
  1094.  
  1095.  
  1096.  
  1097. As an example, consider a system executing a series of copy
  1098. commands moving files from one system to another.  The
  1099. credentials of the user will have been established when the user
  1100. logged on.  The first time a copy is requested, a new process
  1101. will start up, open a connection to the destination system, and
  1102. create a token to authenticate itself.  Creating that token will
  1103. be an expensive operation, but information will be computed and
  1104. "cached" in the credentials structure which will allow any
  1105. subsequent tokens on behalf of that user to that server to be
  1106. computed cheaply.  After the copy completes, the connection is
  1107. closed and the process terminates.  In response to a second copy
  1108. request, another new process will be created and a new token
  1109. computed.  For this operation to get a performance benefit from
  1110. the caching, the information computed by the first process must
  1111. somehow make it to the second.
  1112.  
  1113. A model for how this caching might work can be seen in the way
  1114. Kerberos caches credentials.  Kerberos keeps credentials in a
  1115. file whose name can be computed from the name of the local user.
  1116. This file is initialized as part of the login process and its
  1117. protection is set so that only processes running under the UID of
  1118. the user may read and write the file.  Processes cache
  1119. information there; all processes running on behalf of the user
  1120. share the file.
  1121.  
  1122. There are two problems with this scheme: first, on a diskless
  1123. node putting information in a file exposes it to eavesdroppers on
  1124. the network; second, it does not accomplish the "key hiding"
  1125. function described earlier in this section.  In a more secure
  1126. implementation, the kernel or a privileged process would manage
  1127. some "pool" of credentials for all processes on a node and would
  1128. grant access to them only through the DASS calls.  Credentials
  1129. structures are complex and varying length; DASS may organize them
  1130. as a set of pools rather than as contiguous blocks of data.  All
  1131. such design issues are "beyond the scope of the architecture".
  1132. Implementations must decide how to control access to credentials.
  1133. They could copy the Kerberos scheme of having credentials
  1134. available to processes with the UID of the login session which
  1135. created them and to privileged processes or there may be a more
  1136. elaborate mechanism for "passing" credentials handles from
  1137. process to process.  This design should probably follow the
  1138. operating system mechanisms for passing around local privileges.
  1139.  
  1140. 1.3.7 Key Hiding - Contexts
  1141.  
  1142. The "GSSAPI" has a concept of a security context which has some
  1143. of the same key hiding problems as a credentials structure.
  1144. Security contexts are used in calls to cryptographically protect
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  Kaufman           Document Expiration: 10 June 1993       Page 18
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  Internet Draft                    DASS            9 December 1992
  1157.  
  1158.  
  1159.  
  1160.  
  1161. user data (from modification or from disclosure and modification)
  1162. using keys established during authentication.  The "services
  1163. provided" specification says that create_ and accept_token return
  1164. a "shared key" and "instance identifier".  The GSSAPI says that a
  1165. context handle is returned which is an integer.  A secure
  1166. implementation would keep the key and instance identifier in
  1167. protected memory and only allow access to them through provided
  1168. interfaces.
  1169.  
  1170. Unlike credentials, there is probably no need to provide
  1171. mechanisms for contexts to be shared between processes.  Contexts
  1172. will normally be associated with some notion of a communications
  1173. "connection" and ends of a connection are not normally shared.  If
  1174. an implementation chooses to provide additional services to
  1175. applications like message sequencing or duplicate detection,
  1176. contexts will have to contain additional fields.  These can be
  1177. created and maintained without any additional authentication
  1178. services.
  1179.  
  1180. 1.4 The Relationship between DASS and ISO Standards
  1181.  
  1182. This section provides an introduction to DASS authentication in
  1183. terms of the ISO Authentication Framework (DP10181-2).   The
  1184. purpose of this introduction is to give the reader an intuitive
  1185. understanding of the way DASS works and how its mechanisms and
  1186. terminology relate to standards.  Important details have been
  1187. omitted here but are spelled out in section 3.
  1188.  
  1189. 1.4.1 Concepts
  1190.  
  1191. The primary goal of authentication is to prevent impersonation,
  1192. that is, the pretense to a false identity. Authentication always
  1193. involves identification in some form. Without authentication,
  1194. anyone could claim to be whomever they wished and get away with
  1195. it.
  1196.  
  1197. If it didn't matter with whom one was communicating, elaborate
  1198. procedures for authentication would be unnecessary. However, in
  1199. most systems, and in timesharing and distributed processing
  1200. environments in particular, the rights of individuals are often
  1201. circumscribed by security policy. In particular, authorization
  1202. (identity based access control) and accountability (audit)
  1203. provisions could be circumvented if masquerading attempts were
  1204. impossible to prevent or detect.
  1205.  
  1206. Almost all practical authentication mechanisms suitable for use
  1207. in distributed environments rely on knowledge of some secret
  1208. information. Most differences lie in how one presents evidence
  1209. that they know the secret. Some schemes, in particular the
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  Kaufman           Document Expiration: 10 June 1993       Page 19
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  Internet Draft                    DASS            9 December 1992
  1221.  
  1222.  
  1223.  
  1224.  
  1225. familiar simple use of passwords, are quite susceptible to
  1226. attack. Generally, the threats to authentication may be
  1227. classified as:
  1228.  
  1229.  - forgery, attempting to guess or otherwise fabricate evidence;
  1230.  
  1231.  - replay, where one can eavesdrop upon another's authentication
  1232.    exchange and learn enough to impersonate them; and
  1233.  
  1234.  - interception, where one slips between the communicants and is
  1235.    able to modify the communications channel unnoticed.
  1236.  
  1237. Most such attacks can be countered by using what is known as
  1238. strong authentication. Strong authentication refers to techniques
  1239. that permit one to provide evidence that they know a particular
  1240. secret without revealing even a hint about the secret. Thus
  1241. neither the entity to whom one is authenticating, nor an
  1242. eavesdropper on the conversation can further their ability to
  1243. impersonate the authenticating principal at some future time as
  1244. the result of an authentication exchange.
  1245.  
  1246. Strong authentication mechanisms, in particular those used here,
  1247. rely on cryptographic techniques. In particular, DASS uses public
  1248. key cryptography. Note that interception attacks cannot be
  1249. countered by strong authentication alone, but generally need
  1250. additional security mechanisms to secure the communication
  1251. channel, such as data encryption.
  1252.  
  1253. 1.4.2 Principals and Their Roles
  1254.  
  1255. All authentication is on behalf of principals. In DASS the
  1256. following types of principals are recognized:
  1257.  
  1258.  - user principals, normally people with accounts who are
  1259.    responsible for performing particular tasks. Generally it is
  1260.    users that are authorized to do things by virtue of having
  1261.    been granted access rights, or who are to be held accountable
  1262.    for specific actions subject to being audited.
  1263.  
  1264.  - server principals, which are accessed by users.
  1265.  
  1266.  - node principals,  corresponding to locations where users and
  1267.    servers, or more accurately, processes acting on behalf of
  1268.    principals can reside.
  1269.  
  1270. Principals can act in one of two capacities:
  1271.  
  1272.  - the claimant is the active entity seeking to authenticate
  1273.    itself, and
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  Kaufman           Document Expiration: 10 June 1993       Page 20
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  Internet Draft                    DASS            9 December 1992
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  - the verifier is the passive entity to whom the claimant is
  1290.    authenticating.
  1291.  
  1292. Users normally are claimants, whereas servers are usually
  1293. verifiers, although sometimes servers can also be claimants.
  1294.  
  1295. There is another kind of principal:
  1296.  
  1297.  - certification authorities (CA's) issue certificates which
  1298.    attest to another principal's public key.
  1299.  
  1300. 1.4.3 Representation, Delegation and Representation Transfer
  1301.  
  1302. Of course, although it is users that are responsible for what the
  1303. computer does, human beings are physically unable to directly do
  1304. anything within a computer system. In point of fact, it is a
  1305. process executing on behalf of a user that actually performs
  1306. useful work. From the point of view of performing security
  1307. controlled functions, the process is the agent, or
  1308. representative, of the user, and is authorized by that user to do
  1309. things on his behalf. In the terms used in the ISO Authentication
  1310. Framework, the user is said to have a representation in the
  1311. process.
  1312.  
  1313. The representation has to come into existence somehow.  Delegation
  1314. refers to the act of creating a representation. A user is said to
  1315. create a representation for themselves by delegating to a
  1316. process. If the user creates another process, say by doing an
  1317. rlogin on a different computer, a representation may be needed
  1318. there as well. This may be accomplished automatically by a
  1319. process known as   representation transfer.   DASS uses the term
  1320. delegation to also mean the act of creating additional
  1321. representations on a remote systems.
  1322.  
  1323. A representation is instantiated in DASS as credentials.
  1324. Credentials include the identity of the principal as well as the
  1325. cryptographic "state" needed to engage in strong authentication
  1326. procedures. Claimant information in credentials enable principals
  1327. to authenticate themselves to others, whereas verifier
  1328. information in credentials permit principals to verify the claims
  1329. of others.  Credentials intended primarily for use by a claimant
  1330. will be referred to as   claimant credentials  in the text which
  1331. follows.  Credentials intended primarily for use in verification
  1332. will be referred to as verifier credentials.  A particular set of
  1333. credentials may or may not contain all of the data necessary to
  1334. be used in both roles.  That will depend on the mechanisms by
  1335. which the credentials were created.
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  Kaufman           Document Expiration: 10 June 1993       Page 21
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  Internet Draft                    DASS            9 December 1992
  1349.  
  1350.  
  1351.  
  1352.  
  1353. In some contexts, but not here, the concept of representation
  1354. and/or delegation is sometimes referred to as proxy. This term is
  1355. used in ECMA TR/46.  We avoid use of the term because of possible
  1356. confusion with an unrelated use of the term in the context of
  1357. DECnet.
  1358.  
  1359. 1.4.4 Key Distribution, Replay, Mutual Authentication and Trust
  1360.  
  1361. Strong authentication uses cryptographic techniques. The
  1362. particular mechanisms used in DASS result in the distribution of
  1363. cryptographic keys as a side effect. These keys are suitable for
  1364. use for providing a data origin authentication service and/or a
  1365. data confidentiality service between a pair of authenticated
  1366. principals.
  1367.  
  1368. Replay detection is provided using timestamps on relevant
  1369. authentication messages, combined with remembering previously
  1370. accepted messages until they become "stale". This is in contrast
  1371. to other techniques, such as challenge and response exchanges.
  1372.  
  1373. Authentication can be one-way or   mutual. One-way authentication
  1374. is when only one party, in DASS the claimant, authenticates to
  1375. the other. Mutual authentication provides, in addition,
  1376. authentication of the verifier back to the claimant. In certain
  1377. communications schemes, for example connectionless transfer, only
  1378. one-way authentication is meaningful. DASS supports mutual
  1379. authentication as a simple extension of one-way authentication
  1380. for use in environments where it makes sense.
  1381.  
  1382. DASS potentially can allow many different "trust relationships"
  1383. to exist. All principals trust one or more CA's to safeguard the
  1384. certification process. Principals use certificates as the basis
  1385. for authenticating identities, and trust that CA's which issue
  1386. certificates act responsibly. Users expect CA's to make sure that
  1387. certificates (and related secrets) are only made for principals
  1388. that the CA knows or has properly authenticated on its own.
  1389.  
  1390. 1.5 An Authentication Walkthrough
  1391.  
  1392. The OSI Authentication Framework characterizes authentication as
  1393. occurring in six phases. This section attempts to describe DASS
  1394. in these terms.
  1395.  
  1396. 1.5.1 Installation
  1397.  
  1398. In this phase, principal certificates are created, as is the
  1399. additional information needed to create claimant and verifier
  1400. credentials. OSI defines three sub-phases:
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  Kaufman           Document Expiration: 10 June 1993       Page 22
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  Internet Draft                    DASS            9 December 1992
  1413.  
  1414.  
  1415.  
  1416.  - Enrollment. In DASS, this is the definition of a principal in
  1417.    terms of a key, name and UID.
  1418.  
  1419.  - Validation,  confirmation of identity to the satisfaction of
  1420.    the CA, after which the CA generates a certificate.
  1421.  
  1422.  - Confirmation.  In DASS, this is the act of providing the user
  1423.    with the certificate and with the CA's own name, key and UID,
  1424.    followed up by the user creating a  trusted authority for that
  1425.    CA. A trusted authority is a certificate for the CA signed by
  1426.    the user.
  1427.  
  1428. Included in this step in DASS is the posting of the certificate
  1429. so as to be available to principals wishing to verify the
  1430. principal's identity. In addition, the user principal saves the
  1431. trusted authority so as to be available when it creates
  1432. credentials.
  1433.  
  1434. 1.5.2 Distribution
  1435.  
  1436. DASS distributes certificates by placing them in the name
  1437. service.
  1438.  
  1439. 1.5.3 Acquisition
  1440.  
  1441. Whenever principals wish to authenticate to one another, they
  1442. access the Name Service to obtain whatever public key
  1443. certificates they need and create the necessary credentials. In
  1444. DASS, acquisition means obtaining credentials.
  1445.  
  1446. Claimant credentials implement the representation of a principal
  1447. in a process, or, more accurately, provide a representation of
  1448. the principal for use by a process. In making this
  1449. representation, the principal delegates to a temporary delegation
  1450. key. In this fashion the claimant's long term principal key need
  1451. not remain in the system.
  1452.  
  1453. Claimant credentials are made by invoking the get credentials
  1454. primitive. Claimant credentials are a DASS specific data
  1455. structure containing:
  1456.  
  1457.  - a name
  1458.  
  1459.  - a ticket, a data structure containing
  1460.  
  1461.    .  a validity interval,
  1462.    .  UID, and
  1463.  
  1464.    .  (temporary) delegation public key, along with a
  1465.  
  1466.    .  digital signature on the above made with the principal
  1467.       private key
  1468.  
  1469.  
  1470.  
  1471.  Kaufman           Document Expiration: 10 June 1993       Page 23
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  Internet Draft                    DASS            9 December 1992
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  - the delegation private key
  1483.  
  1484. Optionally in addition, there may be credential information
  1485. relating to the node on which the user is logged in and the
  1486. account on that node.  A detailed description of all the
  1487. information found in credentials can be found in section 3.
  1488. Verifier credentials are made with initialize_server. Verifier
  1489. credentials consist of a principal (long term) private key. The
  1490. rationale is that these credentials are usually needed by servers
  1491. that must be able to run indefinitely without re-entry of any
  1492. long term key.
  1493.  
  1494. In addition, claimants and verifiers have a trusted authority,
  1495. which consists of information about a trusted CA.  That
  1496. information is its:
  1497.  
  1498.  - name (this will appear in the "issuer" field in principal
  1499.    certificates),
  1500.  
  1501.  - public key (to use in verifying certificates issued by that
  1502.    CA), and
  1503.  
  1504.  - UID.
  1505.  
  1506. Trusted authorities are used by principals to verify certificates
  1507. for other principals' public keys.  CAs are arranged in a
  1508. hierarchy corresponding to the naming hierarchy, where each
  1509. directory in the naming hierarchy is controlled by a single CA.
  1510. Each CA certifies the CA of its parent directory, the CAs of each
  1511. of its child directories, and optionally CAs elsewhere in the
  1512. naming hierarchy (mainly to deal with the case where the
  1513. directories up to a common ancestor lack CAs).  Even though a
  1514. principal has only a single CA as a trusted authority, it can
  1515. securely obtain the public key of any principal in the namespace
  1516. by "walking the CA hierarchy".
  1517.  
  1518. 1.5.4 Transfer
  1519.  
  1520. The DASS exchange of authentication information is illustrated in
  1521. Figure 1-1. During the transfer phase, the DASS claimant sends an
  1522. authentication token  to the verifier. Authentication tokens are
  1523. made by invoking the create_token primitive. The authentication
  1524. token is cryptographically protected and specified as a DASS data
  1525. structure in ASN.1. The authentication token includes:
  1526.  
  1527.  - a ticket,
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  Kaufman           Document Expiration: 10 June 1993       Page 24
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  Internet Draft                    DASS            9 December 1992
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  - a DES authenticating key encrypted using the intended
  1546.    verifier's public key
  1547.  
  1548.  - one of the following:
  1549.  
  1550.    . if delegation is not being performed, a digital signature on
  1551.      the encrypted DES key using the delegation private key, or
  1552.  
  1553.    . if delegation is being performed, sending the delegation
  1554.      private key, DES encrypted using the DES authenticating key
  1555.  
  1556.  - an authenticator, which is a cryptographic checksum made using
  1557.    the DES authenticating key over a buffer containing
  1558.  
  1559.    . a timestamp
  1560.  
  1561.    . any application supplied "channel bindings". For example,
  1562.      addresses or other context information. The purpose of this
  1563.      field is to thwart substitution and replay attacks.
  1564.  
  1565.  - additional optional information concerning node authentication
  1566.    and context.
  1567.  
  1568. As a side effect, after init_authentication_context, the caller
  1569. receives a local authentication context, a data structure
  1570. containing:
  1571.  
  1572.  - the DES key, and
  1573.  
  1574.  - if mutual authentication is being requested, the expected
  1575.    response.
  1576.  
  1577. In order to construct an authentication token, the claimant needs
  1578. to access the verifier's public key certificate from the Name
  1579. Service (labeled CDC, for Certificate Distribution Center, in the
  1580. figure).
  1581.  
  1582. Note that while an authenticator can only be used once, it is
  1583. permissible to re-establish the same local authentication context
  1584. multiple times. That is, the ticket and DES key establishment
  1585. components of the authentication token may have a relatively long
  1586. lifetime. This permits a performance improvement in that repeated
  1587. applications of public key operations can be alleviated if one
  1588. caches authentication contexts, along with other components from
  1589. a successfully used authentication token and the associated
  1590. verified principal public key value. It is a relatively
  1591. inexpensive operation to create (and verify) "fresh"
  1592. authenticators based on cached authentication context.
  1593.  
  1594.  
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  Kaufman           Document Expiration: 10 June 1993       Page 25
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  Internet Draft                    DASS            9 December 1992
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.    Claimant Actions      | Communications |  Verifier Actions
  1613.                          |                |
  1614.         verifier name    |                |
  1615.                 |        |                |
  1616.                 |        |           +---+|
  1617.                 \------------------->|   ||
  1618.   trusted                |           |   ||
  1619. authorities              |           |CDC||
  1620.      |    +-----------+  |certificate|   ||
  1621.      |    |  Verify   |<-------------|   ||
  1622.      \--->|Certificate|  |           +---+|
  1623.           +-----------+  |                |
  1624.   Claimant        |      |                |
  1625. credentials    Verifier  |                |   Verifier
  1626.      |       Public Key  |                | Credentials
  1627.      |            |      |                |       |
  1628.      |            V      |                |       V
  1629.      |    +-----------+  | Authentication | +-----------+
  1630.      |    |   Make    |  |     Token      | |   Check   |   Replay
  1631.      \--->|  Token    |-------------------->|   Token   |<-->Cache
  1632.           +-----------+  |                | +-----------+
  1633.    DES <---/      |      |                |  |   |    \----->DES
  1634.    key            |      |                | /Claimant        key
  1635.                   |      |                |/Public Key
  1636.                   |      |                /      |        trusted
  1637.                   |      |      Claimant /|      V     authorities
  1638.                   |      |+---+   Name  / | +-----------+     |
  1639.          authentication  ||   |<-------/  | |  Verify   |<----/
  1640.             context      ||   |certificate| |Certificate|
  1641.                   |      ||CDC|------------>|           |-->accept/
  1642.                   |      ||   |           | +-----------+   reject
  1643.                   |      ||   |           |      |      \
  1644.                   |      |+---+           |authentication\
  1645.                   V      |     mutual     |   context     V
  1646.           +-----------+  | authentication |      |      claimant
  1647.        /--|  Accept   |  |    response    | +----------+credentials
  1648.       V   |  Mutual   |<--------------------|  Make    |(delegation)
  1649.   accept/ +-----------+  |                | | Response |
  1650.   reject                 |                | +----------+
  1651.                          |                |
  1652.  
  1653.  
  1654.            Figure 1 - Authentication Exchange Overview
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  Kaufman           Document Expiration: 10 June 1993       Page 26
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  Internet Draft                    DASS            9 December 1992
  1669.  
  1670.  
  1671.  
  1672.  
  1673. 1.5.5 Verification
  1674.  
  1675. Upon receipt of an authentication token, the verifier extracts
  1676. the DES key using its verifier credentials, accesses the Name
  1677. Service (labeled CDC for Certificate Distribution Center) to
  1678. obtain the certificates needed to perform cryptographic checks on
  1679. the incoming information, and verifies all of the signatures on
  1680. the received certificates and the authentication token.
  1681. Verification can result in creation of new claimant credentials
  1682. if delegation is performed.
  1683.  
  1684. As part of this process, verified authenticators are retained for
  1685. a suitable timeout period.
  1686.  
  1687. 1.5.6 Unenrolment
  1688.  
  1689. This is the removal of information from the Name Service. The
  1690. only other form of revocation supported by DASS is certificate
  1691. timeout.  Every certificate contains an expiration time (expected
  1692. in ordinary use to be about a year from its signing date).  DASS
  1693. does not currently support the revocation lists in X.509.
  1694.  
  1695.  
  1696. 2 Services Used
  1697.  
  1698. Aside from operating system services needed to maintain its
  1699. internal state, DASS relies on a global distributed database in
  1700. which to store its certificates, a reliable source of time, and a
  1701. source of random numbers for creating cryptographic keys.
  1702.  
  1703. 2.1 Time Service
  1704.  
  1705. DASS requires access to the current time in several of its
  1706. algorithms.  Some of its uses of time are security critical.  In
  1707. others, network synchronization of clocks is required.  DASS does
  1708. not, however, depend on having a single source of time which is
  1709. both secure and tightly synchronized.
  1710.  
  1711. The requirements on system provided time are:
  1712.  
  1713.  - For purposes of validating certificates and tickets, the
  1714.    system needs access to know the date and time accurate to
  1715.    within a few hours with no particular synchronization
  1716.    requirements.  If this time is inaccurate, then valid requests
  1717.    may be rejected and expired messages may be accepted.
  1718.    Certificate expiration is a backup revocation mechanism, so
  1719.    this can only cause a security compromise in the event of
  1720.    multiple failures.  In theory, this could be provided by
  1721.    having a local clock on every node accurate to within a few
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  Kaufman           Document Expiration: 10 June 1993       Page 27
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  Internet Draft                    DASS            9 December 1992
  1733.  
  1734.  
  1735.  
  1736.  
  1737.    hours over the life of the product to provide this function.
  1738.    If an insecure network time service is used to provide this
  1739.    time, there are theoretical security threats, but they are
  1740.    expected to be logistically impractical to exploit.
  1741.  
  1742.  - For purposes of detecting replay of authentication tokens, the
  1743.    system needs access to a  strictly monotonic time source which
  1744.    is reasonably synchronized across the network (within a few
  1745.    minutes) for the system to work, but inaccuracy does not
  1746.    present a security threat except as noted below. It may
  1747.    constitute an availability threat because valid requests may
  1748.    be rejected.  In order to get strict monotonicity in the
  1749.    presence of a rapid series of requests, time must be returned
  1750.    with high precision.  There is no requirement for a high
  1751.    degree of accuracy.  Inaccurate time could present a security
  1752.    threat in the following scenario: if a client's clock is made
  1753.    sufficiently fast that its tokens are rejected, someone
  1754.    harvesting those tokens from the wire could replay them later
  1755.    and impersonate the client.  In some environments, this might
  1756.    be an easier threat than harvesting tokens and preventing
  1757.    their delivery.
  1758.  
  1759.  - For purposes of aging stale entries from caches, DASS requires
  1760.    reasonably accurate timing of intervals.  To the extent that
  1761.    intervals are reported as shorter than the actually were,
  1762.    revocation of certificates from the naming service may not be
  1763.    as timely as it should be.
  1764.  
  1765. 2.2 Random Numbers
  1766.  
  1767. In order to generate keys, DASS needs a source of "cryptographic
  1768. quality" random numbers.  Cryptographic quality means that
  1769. knowing any of the "random numbers" returned from a series and
  1770. knowing all state information which is not protected, an attacker
  1771. cannot predict any of the other numbers in the series.  Hardware
  1772. sources are ideal, but there are alternative techniques which may
  1773. also be acceptable. A 56 bit "truly random" seed (say from a
  1774. series of coin tosses) could be used as a DES key to encrypt an
  1775. infinite length known text block in CBC mode to produce a pseudo-rand
  1776. sequence provided the key and current point in the sequence were
  1777. adequately protected.  There is considerable controversy
  1778. surrounding what constitutes cryptographic quality random
  1779. numbers, and it is not a goal of this document to resolve it.
  1780.  
  1781. 2.3 Naming Service
  1782.  
  1783. DASS stores creates and uses "certificates" associated with every
  1784. principal in the system, and encrypted credentials associated
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  Kaufman           Document Expiration: 10 June 1993       Page 28
  1792.  
  1793.  
  1794.  
  1795.  
  1796.  Internet Draft                    DASS            9 December 1992
  1797.  
  1798.  
  1799.  
  1800.  
  1801. with most.  This information is stored in an on-line service
  1802. associated with the principal being certified.  The long term
  1803. vision is for DASS to use an X.500 naming service, and DASS will
  1804. from its inception authenticate X.500 names.  To avoid a
  1805. dependence on having an X.500 naming service available (and to
  1806. gain the benefits of a "login agent" that controls password
  1807. guessing), an alternative certificate  distribution center
  1808. protocol is also described.
  1809.  
  1810. The specific requirements DASS places on the naming service are:
  1811.  
  1812.  - It must be highly available.  A user's naming service entry
  1813.    must be available to any node where the user is to obtain
  1814.    services (or service will be denied).  A server's naming
  1815.    service entry must be available from any node from which the
  1816.    service is to be invoked (or service will be denied).
  1817.  
  1818.  - It must be timely.  The presence of "stale" information in the
  1819.    naming service may cause some problems.  When a password
  1820.    changes, the old password may remain valid (and the new
  1821.    password invalid) to the extent the naming service provides
  1822.    stale information.  When a user or server is added to the
  1823.    network, it will not be able to participate in authentication
  1824.    until the information added to the naming service is available
  1825.    at the node doing the authentication.  In the unusual
  1826.    circumstance that a key changes, the entity whose key has
  1827.    changed will not be able to use the new key until the new
  1828.    certificate is uniformly available.
  1829.  
  1830.  - It must be secure with regard to certain specific properties.
  1831.    In general, the security of DASS protected applications does
  1832.    not depend on the security of the naming service.  It is
  1833.    expected that the availability needs of the naming service
  1834.    will prevent it from being as secure as some applications need
  1835.    to be.  There are two aspects of DASS security which do depend
  1836.    on the security of the naming service: timely revocation of
  1837.    certificates and protection of user secrets against dictionary
  1838.    based password guessing. DASS depends on the removal of
  1839.    certificates from the naming service in order to revoke them
  1840.    more quickly than waiting for them to time out.  For this
  1841.    mechanism to provide any actual security, it must not be
  1842.    possible for a network entity to "impersonate" the naming
  1843.    service and the naming service must be able to enforce access
  1844.    controls which prevent a revoked certificate from being
  1845.    reinstated by an unauthorized entity.  In the long run, it is
  1846.    expected that DASS itself will be used to secure the naming
  1847.    service, which presents certain potential recursion problems
  1848.    (to be addressed in the naming service design).  If the naming
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  Kaufman           Document Expiration: 10 June 1993       Page 29
  1856.  
  1857.  
  1858.  
  1859.  
  1860.  Internet Draft                    DASS            9 December 1992
  1861.  
  1862.  
  1863.  
  1864.  
  1865.    service is not authenticated (as is expected in early
  1866.    versions) attacks where a revoked certificate is "reinstated"
  1867.    through impersonation of the naming service are possible.
  1868.  
  1869. The specific functions DASS requests of the naming service are
  1870. simple:
  1871.  
  1872.  - Given an X.500 name, store a set of certificates associated
  1873.    with that name.
  1874.  
  1875.  - Given an X.500 name, retrieve the set of certificates
  1876.    associated with that name.
  1877.  
  1878.  - Given an X.500 name, store a set of encrypted credentials
  1879.    associated with that name.
  1880.  
  1881.  - Given and X.500 name, retrieve a set of encrypted credentials
  1882.    associated with that name.
  1883.  
  1884. Implementation over a particular naming service may implement
  1885. more specialized functions for reasons of efficiency.  For
  1886. example, the certificates associated with a name may be separated
  1887. into several sets (child, parent, cross, self) so that only the
  1888. relevant ones may be retrieved.  In order that access to the
  1889. naming service itself be secure, the protocols should be
  1890. authenticated.  Certificates should generally be readable without
  1891. authentication in order to avoid recursion problems.  Requests to
  1892. read encrypted credentials should be specialized and should
  1893. include proof of knowledge of the password in order that the
  1894. naming service can audit and slow down false password guesses.
  1895.  
  1896. The following sections describe the interfaces to specific naming
  1897. services:
  1898.  
  1899. 2.3.1 Interface to X.500
  1900.  
  1901. Certificates associated with a particular name are stored as
  1902. attributes of the entry as specified in X.509.  X.509 defines
  1903. attributes appropriate for parent and cross certificates
  1904. (CrossCertificatePair, CACertificate) for some principals; we
  1905. will have to define a DASSUserPrincipal object class including
  1906. these attributes in order to properly use them with ordinary
  1907. users.  Retrieval is via normal X.500 protocols.  Certificates
  1908. should be world readable and modifiable only by appropriate
  1909. authorities.
  1910.  
  1911. Encrypted credentials are stored with the entry of the principal
  1912. under a yet to be defined attribute.  The credentials should be
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  Kaufman           Document Expiration: 10 June 1993       Page 30
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  Internet Draft                    DASS            9 December 1992
  1925.  
  1926.  
  1927.  
  1928.  
  1929. encoded as specified in section 4.  In the absence of extensions
  1930. to the X.500 protocol to control password guessing, the encrypted
  1931. credentials should be world readable and updatable only by the
  1932. named principal and other appropriate authorities.
  1933.  
  1934. 2.3.2 Interface to CDC
  1935.  
  1936. The CDC (Certificate Distribution Center) is a special purpose
  1937. name server created to service DASS until an X.500 service is
  1938. available in all of the environments where DASS needs to operate.
  1939. The CDC uses a special purpose protocol to communicate with DASS
  1940. clients.  The protocol was designed for efficiency, simplicity,
  1941. and security.  CDCs use DASS as an authentication mechanism and
  1942. to protect encrypted credentials from unaudited password
  1943. guessing.
  1944.  
  1945. Each DASS client maintains a list of CDCs and the portion of the
  1946. namespace served by that CDC.  Each directory has a master
  1947. replica which is the only one which will accept updates.  The
  1948. CDCs maintain consistency with one another using protocols beyond
  1949. the scope of this document.  When a DASS client wishes to make a
  1950. request of a CDC, it opens a TCP or DECnet connection to the CDC
  1951. and sends an ASN.1 (BER) encoded request and receives a
  1952. corresponding ASN.1 (BER) encoded response.  Clients are expected
  1953. to learn the IP or DECnet address and port number of the CDC
  1954. supporting a particular name from a local configuration file.  To
  1955. maximize performance, the requests bundle what would be several
  1956. requests if made in terms of requests for individual
  1957. certificates.  It is intended that all certificates needed for an
  1958. authentication operation be retrievable with at most two CDC
  1959. requests/responses (one to the CDC of the client and one to the
  1960. CDC of the server).
  1961.  
  1962. Documented here is the protocol a DASS client would use to
  1963. retrieve certificates and credentials from a CDC and update a
  1964. user password.  This protocol does not provide for updates to the
  1965. certificate and credential databases.  Such updates must be
  1966. supported for a practical system, but could be done either by
  1967. extensions to this protocol or by local security mechanisms
  1968. implemented on nodes supporting the CDC.  Similarly, availability
  1969. can be enhanced by replicating the CDC.  Automating the
  1970. replication of updates could be implemented by extensions to this
  1971. protocol or by some other mechanism.  This specification assumes
  1972. that updates and replication are local matters solved by individual
  1973. CA/CDC implementations.
  1974.  
  1975. Requests and responses are encoded as follows:
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  Kaufman           Document Expiration: 10 June 1993       Page 31
  1984.  
  1985.  
  1986.  
  1987.  
  1988.  Internet Draft                    DASS            9 December 1992
  1989.  
  1990.  
  1991.  
  1992. 2.3.2.1 ReadPrinCertRequest
  1993.  
  1994. This request asks the CDC to return the child certificates and
  1995. selected incoming cross certificates for the specified object.
  1996. The format of the request is:
  1997.  
  1998.      ReadPrinCertRequest ::= [4] IMPLICIT SEQUENCE {
  1999.           flags [0] BIT STRING DEFAULT {},
  2000.           index [1] IMPLICIT INTEGER DEFAULT 0,
  2001.           resolveFrom [2] Name OPTIONAL,
  2002.           principal Name,
  2003.           crossCertIssuers ListOfIssuers OPTIONAL
  2004.           }
  2005.      ListOfIssuers ::= SEQUENCE OF Name
  2006.  
  2007. The first 24 bits of flags,  if present, contain a protocol
  2008. version number.  Clients following this spec should place the
  2009. value 2.0.0 in the three bytes.  Servers following this spec
  2010. should accept any value of the form 1.x.x or 2.x.x.    flags  bits
  2011. beyond the first 24 are reserved for future use (should not be
  2012. supplied by clients and should be ignored by servers).
  2013.  
  2014. index  is only used if the response exceeds the size of a single
  2015. message; in that case, the query is repeated with    index set to
  2016. the value that was returned by ReadPrinCertResponse.
  2017. resolveFrom  and  principal imply a set of entities for which
  2018. certificates should be retrieved.   resolveFrom (if present) must
  2019. be an ancestor of     principal and child certificates will be
  2020. retrieved for  principal  and  all names which are ancestors of
  2021. principal but descendants of  resolveFrom.  The encoding of names
  2022. is per X.500 and is specified in more detail in section 4.  The
  2023. CDC returns the certificates in order of the object they came
  2024. from, parents before children.
  2025.  
  2026. crossCertIssuers  is a list of cross certifiers that would be
  2027. believed in the context of this authentication.  If supplied, the
  2028. CDC may return a chain of certificates starting with one of the
  2029. named crossCertIssuers  and ending with the named principal.   One
  2030. of  resolveFrom  or  crossCertIssuers must be present in any
  2031. request; if both are present, the CDC may return either chain.
  2032.  
  2033. 2.3.2.2 ReadPrinCertResponse
  2034.  
  2035. This is the response a CDC sends to a ReadPrinCertRequest.  Its
  2036. syntax is:
  2037.  
  2038.      ReadPrinCertResponse ::= [5] IMPLICIT SEQUENCE {
  2039.           status [0] IMPLICIT CDCstatus DEFAULT success,
  2040.           index [1] INTEGER OPTIONAL,
  2041.           resolveTo [2] Name OPTIONAL,
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  Kaufman           Document Expiration: 10 June 1993       Page 32
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  Internet Draft                    DASS            9 December 1992
  2053.  
  2054.  
  2055.  
  2056.  
  2057.           certSequence [3] IMPLICIT CertSequence,
  2058.           indexInvalidator [4] OCTET STRING (SIZE(8)) OPTIONAL,
  2059.           flags [5] BIT STRING OPTIONAL
  2060.           }
  2061.      CertSequence ::= SEQUENCE OF Certificate
  2062.  
  2063. status indicates success or the cause of the failure.
  2064.  
  2065. index  if present indicates that the request could not be fully
  2066. satisfied in a single request because of size limitations.  The
  2067. request should be repeated with this index supplied in the
  2068. request to get more.
  2069.  
  2070. resolveTo  will be present if   index is present and should be
  2071. supplied in the request for more certificates.
  2072. certSequence contains certificates found matching the search
  2073. criteria.
  2074.  
  2075. indexInvalidator may be present and indicates the version of the
  2076. database being read.  If a set of certificates is being read in
  2077. multiple requests (because there were too many to return in a
  2078. single message), the reader should check that the value for
  2079. indexInvalidator is the same on each request.  If it is not, the
  2080. server may have skipped or duplicated some certificates.  This
  2081. field must not be present if the version number in the request
  2082. was missing or version 1.x.x.
  2083.  
  2084. The first 24 bits of   flags,  if present, indicate the protocol
  2085. version number.  Implementers of this version of the spec should
  2086. supply 2.0.0 and should accept any version number of the form
  2087. 1.x.x or 2.x.x.
  2088.  
  2089. 2.3.2.3 ReadOutgoingCertRequest
  2090.  
  2091. This requests from the CDC a list of all parent and outgoing
  2092. cross certificates for a specified object.  A CDC is capable of
  2093. storing cross certificates either with the subject or the issuer
  2094. of the cross certificate.  In response to this request, the CDC
  2095. will return all parent and cross certificates stored with the
  2096. issuer for the named principal and all of its ancestors. Its
  2097. syntax is:
  2098.  
  2099.      ReadOutgoingCertRequest ::= [6] IMPLICIT SEQUENCE {
  2100.           flags [0] BIT STRING DEFAULT {},
  2101.           index [1] IMPLICIT INTEGER DEFAULT 0,
  2102.           principal Name
  2103.           }
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  Kaufman           Document Expiration: 10 June 1993       Page 33
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  Internet Draft                    DASS            9 December 1992
  2117.  
  2118.  
  2119.  
  2120. The first 24 bits of    flags is a protocol version number and
  2121. should contain 2.0.0 for clients implementing this version of the
  2122. spec.  Servers implementing this version of the spec should
  2123. accept any version number of the form 1.x.x or 2.x.x.  The
  2124. remaining bits are reserved for future use (they should not be
  2125. supplied by clients and they should be ignored by servers).
  2126.  
  2127. index is used for continuation (see ReadPrinCertRequest).
  2128.  
  2129. principal is the name for which certificates are requested.
  2130.  
  2131. 2.3.2.4 ReadOutgoingCertResponse
  2132.  
  2133. This is the response to a ReadOutgoingCertRequest.  Its syntax
  2134. is:
  2135.  
  2136.      ReadOutgoingCertResponse::= [7] IMPLICIT SEQUENCE {
  2137.           status [0] IMPLICIT CDCStatus DEFAULT success,
  2138.           index [1] INTEGER OPTIONAL,
  2139.           certSequence [2] IMPLICIT CertSequence,
  2140.           indexInvalidator [3] OCTET STRING (SIZE(8))
  2141.      OPTIONAL,
  2142.           flags [4] BIT STRING OPTIONAL
  2143.           }
  2144.  
  2145.      CertSequence ::= SEQUENCE OF Certificate
  2146.  
  2147. status  indicates success of the cause of failure of the
  2148. operation.
  2149.  
  2150. index is used for continuation; see ReadPrinCertRequest.
  2151.  
  2152. certSequence is the list of parent and outgoing cross
  2153. certificates.
  2154.  
  2155. indexInvalidator is used for continuation; see
  2156. ReadPrinCertResponse (the same rules apply with respect to
  2157. version numbers).
  2158.  
  2159. The first 24 bits of flags, if present, contain the protocol
  2160. version number.  Clients implementing this version of the spec
  2161. should supply the value 2.0.0.  Servers should accept any values
  2162. of the form 1.x.x or 2.x.x.  The remaining bits are reserved for
  2163. future use (they should not be supplied by clients and should be
  2164. ignored by servers).
  2165.  
  2166. 2.3.2.5 ReadCredentialRequest
  2167.  
  2168. This request is made to retrieve an principal's encrypted
  2169. credentials.  To prevent unaudited password guessing, this
  2170. structure includes an encrypted value that proves that the
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  Kaufman           Document Expiration: 10 June 1993       Page 34
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  Internet Draft                    DASS            9 December 1992
  2181.  
  2182.  
  2183.  
  2184.  
  2185. requester knows the password that will decrypt the structure.
  2186. The syntax of the request is:
  2187.  
  2188.      ReadCredentialRequest ::= [2] IMPLICIT SEQUENCE {
  2189.           flags [0] BIT STRING DEFAULT {}
  2190.           principal Name,
  2191.           logindata [2] BIT STRING DEFAULT {},
  2192.           token [3] BIT STRING OPTIONAL
  2193.           }
  2194. The first 24 bits of   flags  contains the version number of the
  2195. protocol.  The value 2.0.0 should be supplied. Any value of the
  2196. form 1.x.x or 2.x.x should be accepted. Any additional bits are
  2197. reserved for future use (should not be supplied by clients and
  2198. should be ignored by servers).
  2199.  
  2200. principal is the name of the principal for whom encrypted
  2201. credentials are desired.
  2202.  
  2203. logindata is an encrypted value.  It may only be present if the
  2204. version number is 2.0.0 or higher.  It must be present to read
  2205. credentials which are protected by the login agent functionality
  2206. of the CDC.  It is constructed as a single RSA block encrypted
  2207. under the public key of the CDC.  The public key of the CDC is
  2208. learned by some local means.  Possibilities include a local
  2209. configuration file or by using DASS to read and verify a chain of
  2210. certificates ending with the CDC [the CDC serving a directory
  2211. should have its public key listed under a name consisting of the
  2212. directory name with the RDN "CSS=X509"; the OID for the type CSS
  2213. is 1.3.24.9.1].  The contents of the block are as follows:
  2214.  
  2215.  - The low order eight bytes contain a randomly generated DES key
  2216.    with the last byte of the DES key placed in the last byte of
  2217.    the RSA block.  This DES key will be used by the CDC to
  2218.    encrypt the response.  Key parity bits are ignored.
  2219.  
  2220.  - The next to last eight bytes contain a long Posix time with
  2221.    the integer time encoded as a byte string using big endian
  2222.    order.
  2223.  
  2224.  - The next eight bytes (from the end) contain a hash of the
  2225.    password.  The algorithm for computing this hash is listed in
  2226.    section 4.4.2.  The CDC never computes this hash; it simply
  2227.    compares the value it receives with the value associated with
  2228.    the credentials.
  2229.  
  2230.  - The next sixteen bytes (from the end) contain zero.
  2231.  
  2232.  - The remainder of the RSA block (which should be the same size
  2233.    as the public modulus of the CDC) contains a random number.
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  Kaufman           Document Expiration: 10 June 1993       Page 35
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  Internet Draft                    DASS            9 December 1992
  2245.  
  2246.  
  2247.  
  2248.  
  2249.    The first byte should be chosen to be non-zero but so the
  2250.    value in the block does not exceed the RSA modulus.  Servers
  2251.    should ignore these bits.  This random number need not be of
  2252.    cryptographic strength, but should not be the same value for
  2253.    all encryptions.  Repeating the DES key would be adequate.
  2254.  
  2255.  - The byte string thus constructed is encrypted using the RSA
  2256.    algorithm by treating the string of bytes as a "big endian"
  2257.    integer and treating the integer result as "big endian" to
  2258.    make a string of bytes.
  2259.  
  2260. token will not be present in the initial implementation but a
  2261. space is reserved in case some future implementation wants to
  2262. authenticate and audit the node from which a user is logging in.
  2263.  
  2264. 2.3.2.6 ReadCredentialProtectedResponse
  2265.  
  2266. This is the second possible response to a ReadPrinLoginRequest.
  2267. It is returned when the encrypted credentials are protected from
  2268. password guessing by the CDC acting as a login agent.  Its syntax
  2269. is:
  2270.  
  2271. ReadCredentialProtectedResponse::=[16] IMPLICIT SEQUENCE {
  2272.         status [0] IMPLICIT CDCStatus DEFAULT success,
  2273.         encryptedCredential [1] BIT STRING,
  2274.         flags [2] BIT STRING OPTIONAL
  2275.         }
  2276.  
  2277. status indicates that the request succeeded or the cause of the
  2278. failure.
  2279.  
  2280. encryptedCredential   contains the DASSPrivateKey structure
  2281. (defined in section 4.1) encrypted under a DES key computed from
  2282. the user's name and password as specified in section 4.4.2 and
  2283. then reencrypted under the DES key provided in the
  2284. ReadPrinLoginRequest.
  2285.  
  2286. The first 24 bits of    flags, if present, contains the version
  2287. number of the protocol.  Implementers of this version of the spec
  2288. should supply 2.0.0 and should accept any version number of the
  2289. form 2.x.x.  Other bits are reserved for future use (they should
  2290. not be supplied and they should be ignored).
  2291.  
  2292. 2.3.2.7 WriteCredentialRequest
  2293.  
  2294. This is a request to update the encrypted credential structure.
  2295. It is used when a user's key or password changes.  The syntax of
  2296. the request is:
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  Kaufman           Document Expiration: 10 June 1993       Page 36
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  Internet Draft                    DASS            9 December 1992
  2309.  
  2310.  
  2311.  
  2312.  
  2313.      WriteCredentialRequest ::= [17] IMPLICIT SEQUENCE {
  2314.           flags [0] BIT STRING DEFAULT {},
  2315.           authtoken [2] BIT STRING OPTIONAL,
  2316.           principal [3] Name,
  2317.           logindata [4] BIT STRING DEFAULT {},
  2318.           furtherSensitiveStuff [5] BIT STRING
  2319.           }
  2320. The first 24 bits of flags is a version number.  Clients
  2321. implementing this version of the spec should supply 2.0.0.
  2322. Servers should accept any value of the form 2.x.x.  Additional
  2323. bits are reserved for future use (clients should not supply them
  2324. and servers should ignore them).
  2325.  
  2326. token, if present, authenticates the entity making the request.
  2327. A request will be accepted either from a principal proving
  2328. knowledge of the password (see   logindata below) or a principal
  2329. presenting a token in this field and satisfying the authorization
  2330. policy of the CDC.  This field need not be present if logindata
  2331. includes the hash2 of the password (anyone knowing the old
  2332. password may set a new one).
  2333.  
  2334. principal is the name of the object for which encrypted
  2335. credentials should be updated.
  2336.  
  2337. logindata  is encrypted as in ReadPrinLoginRequest.  It proves
  2338. that the requester knows the old password of the principal to be
  2339. updated (unless the token supplied is from the user's CA) and
  2340. includes the key which encrypts furtherSensitiveStuff.
  2341.  
  2342. furtherSensitiveStuff   is an encrypted field constructed as
  2343. follows:
  2344.  
  2345.  - The first eight bytes consist of the hash2 defined in section
  2346.    4.4.2 with the last byte of the hash2 value stored first.  The
  2347.    CDC stores this value and compares it with the values supplied
  2348.    in future requests of ReadCredentialRequest and
  2349.    WriteCredentialRequest.
  2350.  
  2351.  - The next (variable number of) bytes contains a DASSPrivateKey
  2352.    structure (defined in section 4.1).  This is the new
  2353.    credential structure that will be returned by the CDC on
  2354.    future ReadCredentialRequests.
  2355.  
  2356.  - The result is padded with zero bytes to a multiple of eight
  2357.    bytes.
  2358.  
  2359.  - The entire padded string is encrypted using the key from
  2360.    logindata or token using DES in CBC mode with zero IV.
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  Kaufman           Document Expiration: 10 June 1993       Page 37
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  Internet Draft                    DASS            9 December 1992
  2373.  
  2374.  
  2375.  
  2376.  
  2377. the new eight byte "hash2" defined in section 4.4.2 concatenated
  2378. with the DASSPrivateKey structure encrypted under the new "hash1"
  2379. all encrypted under the DES key included in logindata.
  2380.  
  2381. 2.3.2.8 HereIsStatus
  2382.  
  2383. This is the response message to ill-formed requests and requests
  2384. that only return a status and no data.  It's syntax is:
  2385.      HereIsStatus ::= [1] IMPLICIT SEQUENCE {
  2386.           status [0] IMPLICIT CDCStatus DEFAULT success
  2387.           }
  2388.  
  2389. status indicates success or the cause of the failure.
  2390.  
  2391. 2.3.2.9 Status Codes
  2392.  
  2393. The following are the CDCStatus codes that can be returned by
  2394. servers.  Not all of these values are possible with all calls,
  2395. and some of the status codes are not possible with any of the
  2396. calls described in this document.
  2397.  
  2398.      CDCStatus ::= INTEGER {
  2399.  
  2400.           success(0),
  2401.           accessDenied(1),
  2402.  
  2403.           wrongCDC(2),     --this CDC does not store the
  2404.                            --requested information
  2405.  
  2406.           unrecognizedCA(3),
  2407.           unrecognizedPrincipal(4),
  2408.  
  2409.           decodeRequestError(5),--invalid BER
  2410.           illegalRequest(6),    --request not recognised
  2411.  
  2412.           objectDoesNotExist(7),
  2413.           illegalAttribute(8),
  2414.  
  2415.           notPrimaryCDC(9),--write requests not accepted
  2416.                            --at this CDC replica
  2417.  
  2418.           authenticationFailure(11),
  2419.           incorrectPassword(12),
  2420.  
  2421.           objectAlreadyExists(13),
  2422.           objectWouldBeOrphan(15),
  2423.  
  2424.           objectIsPermanent(16),
  2425.  
  2426.  
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  Kaufman           Document Expiration: 10 June 1993       Page 38
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  Internet Draft                    DASS            9 December 1992
  2437.  
  2438.  
  2439.  
  2440.  
  2441.           objectIsTentative(17),
  2442.           parentIsTentative(18),
  2443.  
  2444.           certificateNotFound(19),
  2445.           attributeNotFound(20),
  2446.  
  2447.           ioErrorOnCertifDatabase(100),
  2448.           databaseFull(101),
  2449.  
  2450.           serverInternalError(102),
  2451.           serverFatalError(103),
  2452.  
  2453.           insufficientResources(104)
  2454.           }
  2455.  
  2456.  
  2457. 3 Services Provided
  2458.  
  2459. This section specifies the services provided by DASS in terms of
  2460. abstract interfaces and a model implementation.  A particular
  2461. implementation may support only a subset of these services and
  2462. may provide them through interfaces which combine functions and
  2463. supply some parameters implicitly. The specific calling
  2464. interfaces are in some cases language and operating system
  2465. specific.  An actual implementation may choose, for example, to
  2466. structure interfaces so that security contexts are established
  2467. and then passed implicitly in calls rather than explicitly
  2468. including them in every call.  It might also bundle keys into
  2469. opaque structures to be used with supplied encryption and
  2470. decryption routines in order to enhance security and modularity
  2471. and better comply with export regulations. Annex B describes a
  2472. Portable API designed so that applications using a limited subset
  2473. of the capabilities of DASS can be easily ported between
  2474. operating systems and between DASS and Kerberos based
  2475. environments.  The model implementation describes data structures
  2476. which include cached values to enhance performance.
  2477. Implementations may choose different contents or different
  2478. caching strategies so long as the same sequence of calls would
  2479. produce the same output for some caching policy.
  2480.  
  2481. DASS operates on four kinds of data structures: Certificates,
  2482. Credentials, Tokens, and Certification Authority State.
  2483. Certificates and Tokens are passed between implementations and
  2484. thus their exact format must be architecturally specified. This
  2485. detailed bit-for-bit specification is in section 4. Credentials
  2486. generally exist only within a single node and their format is
  2487. therefore not specified here. The contents of all of these data
  2488. structures is listed below followed by the algorithms for
  2489. manipulating them.
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  Kaufman           Document Expiration: 10 June 1993       Page 39
  2496.  
  2497.  
  2498.  
  2499.  
  2500.  Internet Draft                    DASS            9 December 1992
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507. There are three kinds of services provided by DASS: Certificate
  2508. Maintenance, Credential Maintenance, and Authentication. The
  2509. first two kinds exist only in support of the third. Certificate
  2510. maintenance functions maintain the database of public keys in the
  2511. naming service. These functions tend to be fairly specialized and
  2512. may not be supported on all platforms. Before authentication can
  2513. take place, both authenticating principals must have constructed
  2514. credentials structures. These are built using the Credential
  2515. Maintenance calls. The Authentication functions use credential
  2516. information and certificates, produce and consume authentication
  2517. tokens and tell the two communicating parties one another's
  2518. names.
  2519.  
  2520. 3.1 Certificate Contents
  2521.  
  2522. For purposes of this architecture, a certificate is a data
  2523. structure posted in the naming service which proclaims that
  2524. knowledge of the private key associated with a stated public key
  2525. authenticates a named principal. Certificates are "signed" by
  2526. some authority, are readable by anyone, and can be verified by
  2527. anyone knowing the public key of the authority.
  2528. DASS organizes the CA trust hierarchy around the naming
  2529. hierarchy. There exists a trusted authority associated with each
  2530. directory in the naming hierarchy. Generally, each authority
  2531. creates certificates stating the public keys of each of its
  2532. children (in the naming hierarchy) and the public key of its
  2533. parent (in the naming hierarchy). In this way, anyone knowing the
  2534. public key of any authority can learn the public key of any other
  2535. by "walking the tree". In order that principals may authenticate
  2536. even when all of their ancestor directories do not participate in
  2537. DASS, authorities may also create "cross-certificates" which
  2538. certify the public key of a named entity which is not a
  2539. descendent.  Rules for finding and following these
  2540. cross-certificates are described in the Get_Pub_Keys routines.
  2541. Every principal is expected to know the public key of the CA of
  2542. the directory in which it is named. This must be securely learned
  2543. when the principal is initialized and may be maintained in some
  2544. form of local storage or by having the principal sign a
  2545. certificate listing the name and public key of its parent and
  2546. posting that certificate in the naming service.
  2547.  
  2548. The syntax and content of DASS certificates are defined in terms
  2549. of X.509 (Directory - Authentication Framework).  While that
  2550. standard prescribes a single syntax for certificates, DASS
  2551. considers certificates to be of one of six types:
  2552.  
  2553.  
  2554.  
  2555.  
  2556.  
  2557.  
  2558.  
  2559.  Kaufman           Document Expiration: 10 June 1993       Page 40
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  Internet Draft                    DASS            9 December 1992
  2565.  
  2566.  
  2567.  
  2568.  
  2569.  - Normal Principal certificates are signed by a CA and certify
  2570.    the name and public key of a principal where the name of the
  2571.    CA is a prefix of the name of the principal and is one
  2572.    component shorter.
  2573.  
  2574.  - Trusted Authority certificates are signed by an ordinary
  2575.    principal and certify the name and public key of the
  2576.    principal's CA (i.e. the CA whose name is a prefix of the
  2577.    principal's name and is one component shorter).
  2578.  
  2579.  - Child certificates are signed by a CA and certify the name and
  2580.    public key of a CA of a descendent directory (i.e. where the
  2581.    name of the issuing CA is a prefix of the name of the subject
  2582.    CA and is one component shorter).
  2583.  
  2584.  - Parent certificates are signed by a CA and certify the name
  2585.    and public key of the CA of its parent directory (i.e. whose
  2586.    name is a prefix of the name of the issuer and is one
  2587.    component shorter).
  2588.  
  2589.  - Cross certificates are signed by a CA and certify the name and
  2590.    public key of a CA of a directory where neither name is a
  2591.    prefix of the other.
  2592.  
  2593.  - Self certificates are signed by a principal or a CA and the
  2594.    issuer and subject name are the same.  They are not used in
  2595.    this version of the architecture but are defined as a
  2596.    convenient data structure in which in which implementations
  2597.    may insecurely pass public keys and they may be used in the
  2598.    future in certain key roll-over procedures.
  2599.  
  2600. It is intended that some future version of the architecture relax
  2601. the restrictions above where prefixes must be one component
  2602. shorter.  Being able to handle certificates where prefixes are
  2603. two or more components shorter complicates the logic of
  2604. treewalking somewhat and is not immediately necessary, so such
  2605. certificates are disallowed for now.
  2606.  
  2607. The syntax of certificates is defined in section 4. For purposes
  2608. of the algorithms which follow, the following is the portion of
  2609. the content which is used (names in brackets refer to the field
  2610. names in the ASN.1 encoded structure):
  2611.  
  2612.  - UID of the issuer (optional)
  2613.  
  2614.  - Full name of the issuer (the authority or principal signing)
  2615.    [issuer]
  2616.  
  2617.  - UID of the subject (optional)
  2618.  
  2619.  
  2620.  
  2621.  
  2622.  
  2623.  Kaufman           Document Expiration: 10 June 1993       Page 41
  2624.  
  2625.  
  2626.  
  2627.  
  2628.  Internet Draft                    DASS            9 December 1992
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  - Full name of the subject (the authority or principal whose key
  2634.    is being certified) [subject]
  2635.  
  2636.  - Public Key of the subject [subjectPublicKey]
  2637.  
  2638.  - Period of validity (effective date and expiration date)
  2639.    [valid]
  2640.  
  2641.  - Signature over the entire content of the certificate created
  2642.    using the private key of the issuer.
  2643.  
  2644. When parsing a certificate, the reader compares the two name
  2645. fields to determine what type of certificate it is. For Parent
  2646. and Trusted Authority certificates, the names are ignored for
  2647. purposes of all further processing. For Child and Normal
  2648. Principal certificates, only the suffix by which the child's name
  2649. is longer than the parent's is used for further processing. The
  2650. reason for this is so that if a branch of the namespace is
  2651. renamed, all of the certificates in the moved branch remain valid
  2652. for purposes of DASS processing. The only purposes of having full
  2653. names in these certificates are (1) to comply with X.509, (2) for
  2654. possible interoperability with other architectures using
  2655. different algorithms, and (3) to allow principals to securely
  2656. store their own names in trusted authority certificates in the
  2657. case where they do not have enough local storage to keep it.
  2658.  
  2659. 3.2 Encrypted Private Key Structure
  2660.  
  2661. In order that humans need only remember a password rather than a
  2662. full set of credentials, and also to make installation of nodes
  2663. and servers easier, there is a defined format for encrypting RSA
  2664. secrets under a password and posting in the naming service. This
  2665. structure need only exist when passwords are used to protect RSA
  2666. secrets; for servers which keep their secrets in non-volatile
  2667. memory or users who carry smart cards, they are unnecessary.
  2668.  
  2669. This structure includes the RSA private/public key pair encrypted
  2670. under a DES key. The DES key is computed as a one-way hash of the
  2671. password.  This structure also optionally includes the UID of the
  2672. principal.  It is needed only if a single RSA key is shared by
  2673. multiple principals (with multiple UIDs).
  2674.  
  2675. Since this structure is posted in the name service and may be
  2676. used by multiple implementations, its format must be
  2677. architecturally defined. The exact encoding is listed in section
  2678. 4.
  2679.  
  2680.  
  2681.  
  2682.  
  2683.  
  2684.  
  2685.  
  2686.  
  2687.  Kaufman           Document Expiration: 10 June 1993       Page 42
  2688.  
  2689.  
  2690.  
  2691.  
  2692.  Internet Draft                    DASS            9 December 1992
  2693.  
  2694.  
  2695.  
  2696. 3.3 Authentication Tokens
  2697.  
  2698. This section of the document defines the contents of the
  2699. authentication tokens which are produced and consumed by
  2700. Create_token and Accept_token. With DASS, the token passed from
  2701. the client to the server is complex, with a large number of
  2702. optional parts, while the token passed from server to client (in
  2703. the case of mutual authentication only) is small and simple.
  2704.  
  2705. The authentication token potentially contains a large number of
  2706. parts, most of which are optional depending on the type of
  2707. authentication. The following defines the content and purpose of
  2708. each of the parts, but does not describe the actual encoding (in
  2709. the belief that such details would be distracting). The encoding
  2710. is in section 4.
  2711.  
  2712. The authentication process begins when the initiator calls
  2713. Create_token with the name of the target. This routine returns an
  2714. authentication token, which is sent to the target. The target
  2715. calls Accept_token passing it the token. Both routines produce a
  2716. second "mutual authentication token". The target returns this to
  2717. the initiator to prove that it received the token.
  2718.  
  2719. 3.3.1 Initial Authentication Token
  2720.  
  2721. The components of the initial authentication token are (names in
  2722. brackets refer to the field names within the ASN.1 encoded
  2723. structures defined in section 4):
  2724.  
  2725.  a) Encrypted Shared Key - [authenticatingKey] - This is a Shared
  2726.     (DES) key encrypted under the public key of the target. Also
  2727.     included in the encrypted structure is a validity interval and
  2728.     a recognizable pattern so that the receiver can tell whether
  2729.     the decryption was successful.
  2730.  
  2731.  b) Login Ticket - [sourcePrincipal.userTicket] - This is a
  2732.     "delegation certificate" signed by a principal's long term
  2733.     private key delegating to a short term public key. Its "active
  2734.     ingredients" are:
  2735.  
  2736.    1) UID of delegating principal [subjectUID]
  2737.  
  2738.    2) Period of validity [validity]
  2739.  
  2740.    3) Delegation public key [delegatingPublicKey]
  2741.  
  2742.    4) Signature by private key of principal
  2743.       The existence of this signature is testimony that the
  2744.       private key corresponding to the delegation public key
  2745.       speaks for the user during the validity interval.
  2746.       This data structure is optional and will be missing if the
  2747.  
  2748.  
  2749.  
  2750.  
  2751.  Kaufman           Document Expiration: 10 June 1993       Page 43
  2752.  
  2753.  
  2754.  
  2755.  
  2756.  Internet Draft                    DASS            9 December 1992
  2757.  
  2758.  
  2759.  
  2760.  
  2761.       authentication is only on behalf of a Local Username on a
  2762.       node (i.e. proxy) rather than on behalf of a real principal
  2763.       with a real key.
  2764.  
  2765.  c) Shared Key Ticket - [sourcePrincipal.sharedKeyTicketSignature]
  2766.     - This is a signature of the Encrypted Shared Key by the
  2767.     Delegation Public key in the Login Ticket.  The existence of
  2768.     this signature is testimony that  the DES key in the encrypted
  2769.     shared key speaks for the user.
  2770.  
  2771.     This data structure is optional and will be missing if the
  2772.     authentication is only on behalf of a Local Username on a node
  2773.     (i.e. proxy) rather than on behalf of a real principal with a
  2774.     real key. It will also be missing if delegation is taking
  2775.     place.
  2776.  
  2777.  d) Node Ticket - [sourceNode.nodeTicketSignature] - This is a
  2778.     signature of the Encrypted Shared key and a "Local Username"
  2779.     on the host node by the node's private key.  The existence of
  2780.     this signature is testimony by the node that the DES key in
  2781.     the encrypted shared key speaks for the named account on that
  2782.     node.
  2783.  
  2784.  e) Delegator - [sourcePrincipal.delegator] - This data structure
  2785.     contains the private login key encrypted under the Shared key.
  2786.     It is optional and is present only if the initiator is
  2787.     delegating to the destination.
  2788.  
  2789.  f) Authenticator - [authenticatorData] - This data structure
  2790.     contains a timestamp and a message digest of the channel
  2791.     bindings signed by the Shared Key. It is always present.
  2792.  
  2793.  g) Principal name - [sourcePrincipal.userName] - This is the name
  2794.     of the initiating principal. It is optional and will be
  2795.     missing for strong proxy where bits on the wire are at a
  2796.     premium and where the destination is capable of independently
  2797.     constructing the name.
  2798.  
  2799.  h) Node name - [sourceNode.nodeName] - This is the name of the
  2800.     initiating node. It is optional and will be missing for strong
  2801.     proxy where bits on the wire are at a premium and the name is
  2802.     present elsewhere in the message being passed.
  2803.  
  2804.  i) Local Username - [sourceNode.username] - This is the local
  2805.     user name on the initiating node. It is optional and will be
  2806.     missing for strong proxy where bits on the wire are at a
  2807.     premium and where the name is present elsewhere in the message
  2808.     being passed.
  2809.  
  2810.  
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  Kaufman           Document Expiration: 10 June 1993       Page 44
  2816.  
  2817.  
  2818.  
  2819.  
  2820.  Internet Draft                    DASS            9 December 1992
  2821.  
  2822.  
  2823.  
  2824.  
  2825. 3.3.2 Mutual Authentication Token
  2826.  
  2827. The authentication buffer sent from the target to the initiator
  2828. (in the case of mutual authentication) is much simpler. It
  2829. contains only the timestamp taken from the authenticator
  2830. encrypted under the Shared Key.  It is ASN.1 encoded to allow for
  2831. future extensions.
  2832.  
  2833. 3.4 Credentials
  2834.  
  2835. DASS organizes its internal state with Credentials structures.
  2836. There are many kinds of information which can be stored in
  2837. credentials. Rather than making a different kind of data
  2838. structure for each kind of data, DASS provides a single
  2839. credentials structure where most of its fields are optional.
  2840. Operating systems must provide some mechanism for having several
  2841. processes share credentials. An example of a mechanism for doing
  2842. this would be for credentials to be stored in a file and the name
  2843. of the file is used as a "handle" by all processes which use
  2844. those credentials. Some of the calls which follow cause
  2845. credentials structures to be updated. It is important to the
  2846. performance of a system that updates to credentials (such as
  2847. occur during the routines Verify_Principal_Name and
  2848. Verify_Node_Name, where the caches are updated) be visible to all
  2849. processes sharing those credentials.
  2850.  
  2851. In many of the calls which follow, the credentials passed may be
  2852. labeled: claimant credentials, verifier credentials or some such.
  2853. This indicates whose credentials are being passed rather than a
  2854. type of credentials. DASS supports only one type of credentials,
  2855. though the fields present in the credentials of one sort of
  2856. principal may be quite different from those present in the
  2857. credentials of another.
  2858.  
  2859. An implementation may choose to support multiple kinds of
  2860. credentials structures each of which will support only a subset
  2861. of the functions available if it is not implementing the full
  2862. architecture.  This would be the case, for example, if an
  2863. implementation did not support the case where a server both
  2864. received requests from other principals and made requests on its
  2865. own behalf using a single set of credentials.
  2866.  
  2867. The following are a list of the fields that may be contained in a
  2868. credentials structure. They are grouped according to common
  2869. usage.
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.  
  2877.  
  2878.  
  2879.  Kaufman           Document Expiration: 10 June 1993       Page 45
  2880.  
  2881.  
  2882.  
  2883.  
  2884.  Internet Draft                    DASS            9 December 1992
  2885.  
  2886.  
  2887.  
  2888.  
  2889. 3.4.1 Claimant information
  2890.  
  2891. This is the information used when the holder of these credentials
  2892. is requesting something. It includes:
  2893.  
  2894.  a) Full X.500 name of the principal
  2895.  
  2896.  b) Public Key of the principal
  2897.  
  2898.  c) Login Ticket - a login ticket contains:
  2899.  
  2900.    1) the UID of the principal
  2901.  
  2902.    2) a period of validity (effective date & expiration date)
  2903.  
  2904.    3) a delegation public key
  2905.  
  2906.    4) a signature of the ticket contents by the principal's long
  2907.       term key
  2908.  
  2909.  d) Delegation Private Key (corresponding to the public key in c3)
  2910.  
  2911.  e) Encrypted Shared Key (present only when credentials were
  2912.     created by accept_token; this information is needed to verify
  2913.     a node ticket after credentials are accepted)
  2914.  
  2915. 3.4.2 Verifier information
  2916.  
  2917. This is the information needed by a server to decrypt incoming
  2918. requests. It is also used by generate_server_ticket to generate a
  2919. login ticket.
  2920.  
  2921.  a) RSA private key.
  2922.  
  2923. 3.4.3 Trusted Authority
  2924.  
  2925. This is information used to seed the walk of the CA hierarchy to
  2926. reliably find the public key(s) associated with a name.
  2927. Normally, the trusted authority in a set of credentials will be
  2928. the directory parent of the principal named in Claimant
  2929. information.  In some circumstances, it may instead be the
  2930. directory parent of the node on which the credentials reside.
  2931.  
  2932.  a) Full X.500 name of a CA
  2933.  
  2934.  b) Corresponding RSA Public Key
  2935.  
  2936.  c) Corresponding UID
  2937.  
  2938.  
  2939.  
  2940.  
  2941.  
  2942.  
  2943.  Kaufman           Document Expiration: 10 June 1993       Page 46
  2944.  
  2945.  
  2946.  
  2947.  
  2948.  Internet Draft                    DASS            9 December 1992
  2949.  
  2950.  
  2951.  
  2952. 3.4.4 Remote node authentication
  2953.  
  2954. This information is present only for credentials generated by
  2955. "Accept_token". It includes information about any remote node
  2956. which vouched for the request.
  2957.  
  2958.  a) Full X.500 name of the node
  2959.  
  2960.  b) Local Username on the node
  2961.  
  2962.  c) Node ticket.
  2963.  
  2964. 3.4.5 Local node credentials
  2965.  
  2966. This information is added by Combine_credentials, and is used by
  2967. Create_token to add a node signature to outbound requests.
  2968.  
  2969.  a) Full X.500 name of the node
  2970.  
  2971.  b) Local Username on the node
  2972.  
  2973.  c) RSA private key of the node
  2974.  
  2975. 3.4.6 Cached outgoing contexts
  2976.  
  2977. There may be one (or more) such structures for each server for
  2978. which this principal has created authentication tokens. These
  2979. represent a cache: they may be discarded at any time with no
  2980. effect except on performance. For each association, the following
  2981. information is kept:
  2982.  
  2983.  a) Destination RSA Public Key (index)
  2984.  
  2985.  b) Encrypted Shared key
  2986.  
  2987.  c) Shared Key Ticket (optional, included if there has been a
  2988.     non-delegating connection)
  2989.  
  2990.  d) Node Ticket
  2991.  
  2992.  e) Delegator (optional, included if there has been a delegating
  2993.     connection)
  2994.  
  2995.  f) Validity interval
  2996.  
  2997.  g) Shared Key
  2998.  
  2999. 3.4.7 Cached Incoming Contexts
  3000.  
  3001. There may be one such structure for each client from which this
  3002. server has received an authentication token.  These represent a
  3003.  
  3004.  
  3005.  
  3006.  
  3007.  Kaufman           Document Expiration: 10 June 1993       Page 47
  3008.  
  3009.  
  3010.  
  3011.  
  3012.  Internet Draft                    DASS            9 December 1992
  3013.  
  3014.  
  3015.  
  3016. cache: they may be discarded at any time with no effect except on
  3017. performance (1).  For each association, the following information
  3018. is kept:
  3019.  
  3020.  a) Encrypted Shared key (index)
  3021.  
  3022.  b) Shared Key
  3023.  
  3024.  c) Validity Interval
  3025.  
  3026.  d) Full X.500 name of Client Principal
  3027.  
  3028.  e) UID of Client Principal
  3029.  
  3030.  f) Public Key of Client Principal
  3031.  
  3032.  g) Name of Client Node
  3033.  
  3034.  h) UID of Client Node
  3035.  
  3036.  i) Public Key of Client Node
  3037.  
  3038.  j) Local Username on Client node
  3039.  
  3040.  k) Delegation Public key of Client Principal's Login Ticket
  3041.  
  3042. The Name, UID and Public key of the Principal are all entered
  3043. together once the Login Ticket has been verified. Similarly the
  3044. Node name, Node key and Username are entered together once the
  3045. Node Ticket has been verified. These pieces of information are
  3046. only present if they have been verified.
  3047.  
  3048. 3.4.8 Received Authenticators
  3049.  
  3050. A record of all the authenticators received is kept. This is used
  3051. to detect replayed messages (2).  The entries in this list may be
  3052. deleted when the timestamp is old enough that they would no longer
  3053.  
  3054.   (1) An implementation may choose to keep one System-wide Cache
  3055.   (and list of incoming timestamps). While it is unlikely that the
  3056.   same Encrypted Shared Key will result from encryption of Shared
  3057.   keys generated by different clients or for different servers,
  3058.   an implementation must ensure that an entry made for one
  3059.   client/server can not be reused by another client/server.
  3060.   Similarly an implementation may choose to keep separate caches
  3061.   for the Shared Key/Validity Interval/Delegation Public Key, the
  3062.   Nodename/UID/key/username and the Principal name/UID/key.
  3063.  
  3064.   (2) This list must be common to all targets that could accept the
  3065.   same authenticator (channel bindings will prevent other targets
  3066.   from accepting the same authenticator). This includes different
  3067.   `servers' sharing the same key.
  3068.  
  3069.  
  3070.  
  3071.  Kaufman           Document Expiration: 10 June 1993       Page 48
  3072.  
  3073.  
  3074.  
  3075.  
  3076.  Internet Draft                    DASS            9 December 1992
  3077.  
  3078.  
  3079.  
  3080. be accepted. This list is kept separate from the Cached incoming
  3081. context in order that the information in the cached incoming
  3082. context can be discarded at any time. An implementation could
  3083. choose to save these timestamps with the cached incoming context if
  3084. it ensures that it can never purge entries from the cache before
  3085. the timestamp has aged sufficiently. This list is accessed based on
  3086. an extract from the signature from the Authenticator. The extract
  3087. must be at least 64 bits, to ensure that it is very unlikely that 2
  3088. authenticators will be received with matching signatures.
  3089.  
  3090.  a) Extract from Signature from Authenticator
  3091.  
  3092.  b) Timestamp
  3093.  
  3094. If an implementation runs out of space to store additional
  3095. authenticators, it may either reject the token which would have
  3096. overflowed the table or it may temporarily narrow the allowed
  3097. clock skew to allow it to free some of the space used to hold
  3098. "old" authenticators.  The first strategy will always falsely
  3099. reject tokens; the second may cause false rejection of tokens if
  3100. the allowed clock skew gets narrowed beyond the actual clock skew
  3101. in the network.
  3102.  
  3103. 3.5 CA State
  3104.  
  3105. The CA needs to maintain some internal state in order to generate
  3106. certificates. This internal state must be protected at all times,
  3107. and great care must be taken to prevent its being disclosed. A CA
  3108. may choose to maintain additional state information in order to
  3109. enhance security.  In particular, it is the responsibility of the
  3110. CA to assure that the same UID is not serially reused by two
  3111. holders of a single name.  In most cases, this can be done by
  3112. creating the UID at the time the user is registered.  To securely
  3113. permit users to keep their UIDs when transferring from another
  3114. CA, the CA must keep a record of any UIDs used by previous
  3115. holders of the name. Since actions of a CA are so security sensitive,
  3116. the CA should also maintain an audit trail of all certificates
  3117. signed so that a history can be reconstructed in the event of a
  3118. compromise.  Finally, for the convenience of the CA operator, the
  3119. CA should record a list of the directories for which it is
  3120. responsible and their UIDs so that these need not be entered
  3121. whenever the CA is to be used.  The state includes at least the
  3122. following information:
  3123.  
  3124.  - Public Key of CA
  3125.  
  3126.  - Private Key of CA
  3127.  
  3128.  - Serial number of next certificate to be issued
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  Kaufman           Document Expiration: 10 June 1993       Page 49
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  Internet Draft                    DASS            9 December 1992
  3141.  
  3142.  
  3143.  
  3144.  
  3145. 3.6 Data types used in the routines
  3146.  
  3147. There are several abstract data types used as parameters to the
  3148. routines described in this section. These are listed here
  3149.  
  3150.  a) Integer
  3151.  
  3152.  b) Name
  3153.     Names unless otherwise noted are always X.500 names.  While
  3154.     most of the design of DASS is naming service independent, the
  3155.     syntax of certificates and tokens only permits X.500 names to
  3156.     be used.  If DASS is to be used in an environment where some
  3157.     other form of name is used, those names must be translated
  3158.     into something syntactically compliant with X.500 using some
  3159.     mechanism which is beyond the scope of this architecture.  The
  3160.     only other form of name appearing in this architecture is a
  3161.     "local user name", which corresponds to the simple name of an
  3162.     "account" on a node.  As a type, such names appear in
  3163.     parameter lists as "Strings".
  3164.  
  3165.  c) String
  3166.     A String is a sequence of printable characters.
  3167.  
  3168.  d) Absolute Time
  3169.     A UTC time. The precision of these Times is not stated. A
  3170.     precision of the order of one second in all times is
  3171.     sufficient.
  3172.  
  3173.  e) Time Interval
  3174.     A Time interval is composed of 2 times. A Start Time and an
  3175.     End Time, both of which are Absolute Times
  3176.  
  3177.  f) Timestamp
  3178.     A Timestamp is a time in POSIX format. I.e. two 32 bit
  3179.     Integers. The first representing seconds, and the second
  3180.     representing nanoseconds.
  3181.  
  3182.  g) Duration
  3183.     A Duration is the length of a time interval.
  3184.  
  3185.  h) Octet String
  3186.     A sequence of bytes containing binary data
  3187.  
  3188.  i) Boolean
  3189.     A value of either True or False
  3190.  
  3191.  j) UID
  3192.     A UID is an bit string of 128 bits.
  3193.  
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  Kaufman           Document Expiration: 10 June 1993       Page 50
  3200.  
  3201.  
  3202.  
  3203.  
  3204.  Internet Draft                    DASS            9 December 1992
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  k) OID
  3210.     An OID is an ISO Object Identifier.
  3211.  
  3212.  l) Shared key
  3213.     A Shared key is a DES key, a sequence of 8 bytes
  3214.  
  3215.  m) CA State
  3216.     A structure of the form described in '3.5
  3217.  
  3218.  n) Credentials
  3219.     A structure of the form described in '3.4
  3220.  
  3221.  o) Certificate
  3222.     An ASN.1 encoding of the structure described in '3.1
  3223.  
  3224.  p) Authentication Token
  3225.     An ASN.1 encoding of the structure described in '3.3.1
  3226.  
  3227.  q) Mutual Authentication Token
  3228.     An ASN.1 encoding of the structure described in '3.3.2
  3229.  
  3230.  r) Encrypted Credentials
  3231.     An ASN.1 encoding of  the  structure described in '3.2
  3232.  
  3233.  s) Public key
  3234.     A representation of an RSA Public key, including all the
  3235.     information needed to encode the public key in a certificate.
  3236.  
  3237.  t) Set of Public key/UID pairs
  3238.     A set of Public key/UID pairs. This Data type is only used
  3239.     internally in DASS - it does not appear in any interface used
  3240.     to other architectures.
  3241.  
  3242. 3.7 Error conditions
  3243.  
  3244. These routines can return the following error conditions (an
  3245. implementation may indicate errors with more or less precision):
  3246.  
  3247.  a) Incomplete chain of trustworthy CAs
  3248.  
  3249.  b) Target has no keys which can be trusted.
  3250.  
  3251.  c) Invalid Authentication Token
  3252.  
  3253.  d) Login Ticket Expired
  3254.  
  3255.  e) Invalid Password
  3256.  
  3257.  f) Invalid Credentials
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  Kaufman           Document Expiration: 10 June 1993       Page 51
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  Internet Draft                    DASS            9 December 1992
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  g) Invalid Authenticator
  3274.  
  3275.  h) Duplicate Authenticator
  3276.  
  3277. 3.8 Certificate Maintenance Functions
  3278.  
  3279. Authentication services depend on a set of data structures
  3280. maintained in the naming service. There are two kinds of
  3281. information: Certificates, which associate names and public keys
  3282. and are signed by off-line Certification Authorities; and
  3283. Encrypted Credentials, which contain RSA Private Keys and certain
  3284. context information encrypted under passwords. Encrypted
  3285. Credentials are only necessary in environments where passwords
  3286. are used. Credentials may alternatively be stored in some other
  3287. secure manner (for example on a smart card).
  3288.  
  3289. The certificate maintenance services are designed so that the
  3290. most sensitive - the actual signing of certificates - may be done
  3291. by an off-line authority.  Once signed, certificates must be
  3292. posted in the naming service to be believed.  The precise
  3293. mechanisms for moving certificates between off-line CAs and the
  3294. on-line naming service are implementation dependent.  For the
  3295. off-line mechanisms to provide any actual security, the CAs must
  3296. be told what to sign in some reliable manner.  The mechanisms for
  3297. doing this are implementation dependent.  The abstract interface
  3298. says that the CA is given all of the information that goes into a
  3299. certificate and it produces the signed certificate.
  3300. There are requirements surrounding the auditing of a CA's
  3301. actions. The details of what actions are audited, where the audit
  3302. trail is maintained, and what utilities exist to search that
  3303. audit trail are not specified here. The functions a CA must
  3304. provide are:
  3305.  
  3306. 3.8.1 Install CA
  3307.  
  3308. Install_CA(
  3309.                     keysize               Integer,   --inputs
  3310.                     CA_state              CA State,  --outputs
  3311.                     CA_Public_Key         Public Key)
  3312.  
  3313. This routine need only generate a public/private key pair of the
  3314. requested size. Keysize is likely to be in implementation
  3315. constant rather than a parameter.  The value is likely to be
  3316. either 512 or 640.  Key sizes throughout will have to increase
  3317. over time as factoring technology and CPU speeds improve.  Both
  3318. keys are stored as part of the CA_state; the public key is
  3319. returned so that other CAs may cross-certify this one. The `Next
  3320. Serial number' in the CA state is set to 1.
  3321.  
  3322.  
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  Kaufman           Document Expiration: 10 June 1993       Page 52
  3328.  
  3329.  
  3330.  
  3331.  
  3332.  Internet Draft                    DASS            9 December 1992
  3333.  
  3334.  
  3335.  
  3336.  
  3337. 3.8.2 Create Certificate
  3338.  
  3339. Create_certificate(
  3340.                                                  --inputs
  3341.                     Renewal               Boolean,
  3342.                     Include_UID           Boolean,
  3343.                     Issuer_name           Name,
  3344.                     Issuer_UID            UID,
  3345.                     Effective_date        Absolute Time,
  3346.                     Expiration_date       Absolute Time,
  3347.                     Subject_name          Name,
  3348.                     Subject_UID           UID,
  3349.                     Subject_public_key    Public Key,
  3350.                                                  --updated
  3351.                     CA_state              CA State,
  3352.                                                  --outputs
  3353.                     Certificate           Certificate)
  3354.  
  3355. This procedure creates and signs a certificate.  Note that the
  3356. various contents of the certificate must be communicated to the
  3357. CA in some reliable fashion.  The Issuer_name and UID are the
  3358. name and UID of the directory on whose behalf the certificate is
  3359. being signed.
  3360.  
  3361. This routine formats and signs a certificate with the private key
  3362. in CA_state. It audits the creation of the certificate and
  3363. updates the sequence number which is part of CA_state. The Issuer
  3364. and Subject names are X.500 names.  If the CA state includes a
  3365. history of what UIDs have previously been used by what names,
  3366. this call will only succeed in the collision case if the Renewal
  3367. boolean is set true.  If the Include_UID boolean is set true,
  3368. this routine will generate a 1992 format X.509 certificate;
  3369. otherwise it will generate a 1988 format X.509 certificate.
  3370.  
  3371. 3.8.3 Create Principal
  3372.  
  3373. Create_principal(
  3374.                                                  --inputs
  3375.                     Password              String,
  3376.                     keysize               Integer,
  3377.                     Principal_name        Name,
  3378.                     Principal_UID         UID,
  3379.                     Parent_Public_key     Public Key,
  3380.                     Parent_UID            UID,
  3381.                                                  --outputs
  3382.                     Encrypted_Credentials Encrypted Credentials,
  3383.                     Trusted_authority_certificate Certificate)
  3384.  
  3385. This procedure creates a new principal by generating a new
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  Kaufman           Document Expiration: 10 June 1993       Page 53
  3392.  
  3393.  
  3394.  
  3395.  
  3396.  Internet Draft                    DASS            9 December 1992
  3397.  
  3398.  
  3399.  
  3400.  
  3401. public/private key pair, encrypting the public and private keys
  3402. under the password, and signing a trusted authority certificate
  3403. for the parent CA.  In an implementation not using passwords
  3404. (e.g. smart cards), an alternative mechanism must be used for
  3405. initially creating principals.  If a principal has protected
  3406. storage for trusted authority information, it is not necessary to
  3407. create a trusted authority certificate and store it in the naming
  3408. service.  Some procedure analogous to this one must be executed,
  3409. however, in which the principal learns the public key and UID of
  3410. its CA and its own name.
  3411.  
  3412. This routine creates two output structures with the following
  3413. steps:
  3414.  
  3415.  a) Generate a public/private key pair using the indicated
  3416.     keysize. An implementation will likely fix the keysize as an
  3417.     implementation constant, most likely 512 or 640 bits, rather
  3418.     than accepting it as a parameter.  Key sizes generally will
  3419.     have to increase over time as factoring technology and CPU
  3420.     speeds improve.
  3421.  
  3422.  b) Form the encrypted credentials by using the public key,
  3423.     private key, and Principal_UID and encrypting them using a
  3424.     hash of the password as the key.
  3425.  
  3426.  c) Generate a trusted authority certificate (which is identical
  3427.     in format to a "parent" certificate) getting fields as
  3428.     follows:
  3429.  
  3430.    1) Certificate version is X.509 1992.
  3431.  
  3432.    2) Issuer name is the Principal name (which is an X.500 name).
  3433.  
  3434.    3) Issuer UID is the Principal UID.
  3435.  
  3436.    4) Validity is for all time.
  3437.  
  3438.    5) Subject name is constructed from the Principal name by
  3439.       removing the last simple name from the hierarchical name.
  3440.  
  3441.    6) Subject UID is the CA_UID.
  3442.  
  3443.    7) Subject Public Key is the CA_Public_Key
  3444.  
  3445.    8) Sequence number is 1.
  3446.  
  3447.    9) Sign the certificate with the newly generated private key of
  3448.       the principal.
  3449.  
  3450.  
  3451.  
  3452.  
  3453.  
  3454.  
  3455.  Kaufman           Document Expiration: 10 June 1993       Page 54
  3456.  
  3457.  
  3458.  
  3459.  
  3460.  Internet Draft                    DASS            9 December 1992
  3461.  
  3462.  
  3463.  
  3464. 3.8.4 Change Password
  3465.  
  3466. Change_password(                                 --inputs
  3467.                     Encrypted_credentials Encrypted Credentials,
  3468.                     Old_password          String,
  3469.                     New_password          String,
  3470.                                                  --outputs
  3471.                     Encrypted_credentials Encrypted Credentials)
  3472.  
  3473. If credentials are stored encrypted under a password, it is
  3474. possible to change the password if the old one is known.  Note
  3475. that it is insufficient to just change a user's password if the
  3476. password has been disclosed.  Anyone knowing the old password may
  3477. have already learned the user's private key.  If a password has
  3478. been disclosed, the secure recovery procedure is to call
  3479. create_principal again followed by create_certificate to certify
  3480. the new key.
  3481.  
  3482. Using DASS, it may not be appropriate for users to periodically
  3483. change their passwords as a precaution unless they also change
  3484. their private keys by the procedure above.  The only likely use
  3485. of the change_password procedure is to handle the case where an
  3486. administrator has chosen a password for the user in the course of
  3487. setting up the account and the user wishes to change it to
  3488. something the user can remember.  A future version of the
  3489. architecture may smooth key roll-over by having the
  3490. change_password command also generate a new key and sign a "self"
  3491. certificate in which the old key certifies the new one.  As a
  3492. separate step, a CA which notices a self certificate posted in
  3493. the naming service could certify the new key instead of the old
  3494. one when the user's certificate is renewed.  While this procedure
  3495. is not as rapid or as reliable as having the user directly
  3496. interact with the CA, it offers a reasonable tradeoff between
  3497. security and convenience when there is no evidence of password
  3498. compromise.
  3499.  
  3500. This routine simply decrypts the encrypted credentials structure
  3501. supplied using the password supplied. It returns a bad status if
  3502. the format of the decrypted information is bad (indicating an
  3503. incorrect password). Otherwise, it creates a new encrypted
  3504. credentials structure by encrypting the same data with the new
  3505. password. It would be highly desirable for the user interface to
  3506. this function to provide the capability to randomly generate
  3507. passwords and prohibit easily guessed user chosen passwords using
  3508. length, character set, and dictionary lookup rules, but such
  3509. capabilities are beyond the scope of this document.
  3510. If encrypted credentials are stored in some local secure storage,
  3511. the above function is all that is necessary (in fact, if the
  3512. storage is sufficiently secure, no password is needed;
  3513. credentials could be stored unenciphered).  If they are stored in
  3514.  
  3515.  
  3516.  
  3517.  
  3518.  
  3519.  Kaufman           Document Expiration: 10 June 1993       Page 55
  3520.  
  3521.  
  3522.  
  3523.  
  3524.  Internet Draft                    DASS            9 December 1992
  3525.  
  3526.  
  3527.  
  3528.  
  3529. a naming service, this function must be coupled with one which
  3530. retrieves the old encrypted credentials from the naming service
  3531. and stores the new.  The full protocol is likely to include
  3532. access control checks that require the principal to acquire
  3533. credentials and produce tokens.  For best security, the encrypted
  3534. credentials should be accessible only through a login agent.  The
  3535. role of the login agent is to audit and limit the rate of
  3536. password guessing.  If passwords are well chosen, there is no
  3537. significant threat from password guessing because searching the
  3538. space is computationally infeasible.  In the context of a login
  3539. agent, change password will be implemented with a specialized
  3540. protocol requiring knowledge of the password and (for best
  3541. security) a trusted authority from which the public key of the
  3542. login agent can be learned.  See section 2.3.2 for the plans for
  3543. the non-X.500 credential storage facility.
  3544.  
  3545. 3.8.5 Change Name
  3546.  
  3547. Change_name(
  3548.                                                  --inputs
  3549.                     Claimant_Credentials  Credentials,
  3550.                     New_name              Name,
  3551.                     CA_Public_Key         Public Key,
  3552.                     CA_UID                UID,
  3553.                                                  --outputs
  3554.                     Trusted_Authority_Certificate Certificate)
  3555.  
  3556. DASS permits a principal to have many current aliases, but only
  3557. one current name.  A principal can authenticate itself as any of
  3558. its aliases but verifies the names of others relative to the name
  3559. by which it knows itself.  Aliases can be created simply by using
  3560. the create_certificate function once for each alias.  To change
  3561. the name of a principal, however, requires that the principal
  3562. securely learn the public key and UID of its new parent CA.  As
  3563. with create_principal, if a principal has secure private storage
  3564. for its trusted authority information, it need not create a
  3565. certificate, but some analogous procedure must be able to install
  3566. new naming information.
  3567.  
  3568. This routine produces a new Trusted Authority Certificate with
  3569. contents as follows:
  3570.  
  3571.  a) Issuer name is New_name (an X.500 name)
  3572.  
  3573.  b) Issuer_UID is Principal UID from Credentials.
  3574.  
  3575.  c) Validity is for all time.
  3576.  
  3577.  d) Subject name is constructed from the Issuer name by removing
  3578.  
  3579.  
  3580.  
  3581.  
  3582.  
  3583.  Kaufman           Document Expiration: 10 June 1993       Page 56
  3584.  
  3585.  
  3586.  
  3587.  
  3588.  Internet Draft                    DASS            9 December 1992
  3589.  
  3590.  
  3591.  
  3592.  
  3593.     the last simple name from the hierarchical name, and
  3594.     converting to an X.500 name.
  3595.  
  3596.  e) Subject UID is CA_UID
  3597.  
  3598.  f) Subject Public Key is CA_Public_Key
  3599.  
  3600.  g) Sequence number is 1.
  3601.  
  3602.  h) The certificate is signed with the private key of the
  3603.     principal from the credentials. Note that this call will only
  3604.     succeed if the principal's private key is in the credentials,
  3605.     which will only be true if the credentials were created by
  3606.     calling Create_server_credentials.
  3607.  
  3608. 3.9 Credential Maintenance Functions
  3609.  
  3610. DASS credentials can potentially have information about two
  3611. principals.  This functionality is included to support the case
  3612. where a user on a node has two identities that might be
  3613. recognized for purposes of managing access controls.  First,
  3614. there is the user's network identity; second, there is an
  3615. identity as controlling a particular "account" or "username" on
  3616. that node.  There are two reasons for recognizing this second
  3617. identity: first, access controls might be specified such that
  3618. only a user is only permitted access to certain resources when
  3619. coming through certain trusted nodes (e.g. files that can't be
  3620. accessed from a terminal at home); and second, before the
  3621. transition strategy to global identities is complete, as a way to
  3622. refer to USER@NODE in a way analogous to existing mechanisms but
  3623. with greater security.
  3624.  
  3625. The mapping of global usernames to local user names on a node is
  3626. outside the scope of DASS.  This is done via a "proxy database"
  3627. or some analogous local mechanism.  What DASS provides are
  3628. mechanisms for adding node oriented credentials into a user's
  3629. credentials structure, carrying the dual authentication
  3630. information in authentication tokens, and extracting the
  3631. information from the credentials structure created by
  3632. Accept_token.
  3633.  
  3634. Some applications of DASS will not make use of the node
  3635. authentication related extensions.  In that case, they will never
  3636. use the Combine_credentials, Create_credentials, Get_node_info,
  3637. or Verify_node_name functions.
  3638.  
  3639. The "normal" sequence of events surrounding a user logging into a
  3640. node are as follows:
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  Kaufman           Document Expiration: 10 June 1993       Page 57
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  Internet Draft                    DASS            9 December 1992
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  a) When the user logs in, he types either a local user ID known
  3658.     to the node or a global name (the details of the user
  3659.     interface are implementation specific).  Through some sort of
  3660.     local mapping, the node determines both a global name and a
  3661.     local account name.  The user also enters a password
  3662.     corresponding to the global name.
  3663.  
  3664.  b) The node calls network_login specifying the user's global name
  3665.     and the supplied password.  The result is credentials which
  3666.     can be used to access network services but which have not yet
  3667.     been verified to be valid.
  3668.  
  3669.  c) The node calls verify_principal_name using its own credentials
  3670.     to verify the authenticity of the user's credentials (these
  3671.     node credentials must have previously been established by a
  3672.     call to initialize_server during node initialization).
  3673.  
  3674.  d) If that test succeeds, the node adds its credentials to those
  3675.     of the user by calling combine_credentials.
  3676.  
  3677. The set of facilities for manipulating credentials follow:
  3678.  
  3679. 3.9.1 Network login
  3680.  
  3681. Network_login(
  3682.                                                  --inputs
  3683.                     Name                  Name,
  3684.                     password              String,
  3685.                     keysize               Integer,
  3686.                     expiration            Time interval,
  3687.                     TA_credentials        Credentials,--optional
  3688.                                                  --outputs
  3689.                     Claimant_credentials  Credentials)
  3690.  
  3691. This function creates credentials for a principal when the
  3692. principal "logs into the network".
  3693.  
  3694. Name is the X.500 name of the principal.
  3695.  
  3696. Password is a secret which authenticates the principal to the
  3697. network.
  3698.  
  3699. Keysize   specifies the size of the temporary "login" or
  3700. "delegation" key.  In a real implementation, it is expected to be
  3701. an implementation constant (most likely 384 or 512 bits).
  3702.  
  3703. Expiration sets a lifetime for the credentials created.  For a
  3704. normal login, this is likely to be an implementation constant on
  3705. the order of 8-72 hours.  Some mechanism for overriding it must
  3706.  
  3707.  
  3708.  
  3709.  
  3710.  
  3711.  Kaufman           Document Expiration: 10 June 1993       Page 58
  3712.  
  3713.  
  3714.  
  3715.  
  3716.  Internet Draft                    DASS            9 December 1992
  3717.  
  3718.  
  3719.  
  3720.  
  3721. be provided to make it possible (for example) to submit a
  3722. background job that might run days or even months after they are
  3723. submitted.
  3724.  
  3725. TA_credentials   are used if the encrypted credentials are
  3726. protected by a login agent. If they are missing, the password
  3727. will be less well protected from guessing attacks.
  3728.  
  3729. This routine does not (as one might expect) securely authenticate
  3730. the principal to the calling procedure.  Since the password is
  3731. used to obtain the principal's private key, this call will
  3732. normally fail if the principal supplies an invalid password.  A
  3733. penetrator who has compromised the naming service could plant
  3734. fake encrypted credentials under any name and impersonate that
  3735. name as far as this call is concerned. A caller that wishes to
  3736. authenticate the user in addition to obtaining credentials to be
  3737. able to act on the user's behalf should call
  3738. Verify_principal_name (below) with the created credentials and
  3739. the credentials of the calling process.
  3740.  
  3741. This routine constructs a credentials structure from information
  3742. found in the naming service encrypted using the supplied
  3743. password.
  3744.  
  3745.  a) If the encrypted credentials structure is protected with a
  3746.     login agent, retrieve the public key of the login agent:
  3747.  
  3748.    1) If TA_credentials are available, use them in a call to
  3749.       Get_Pub_Keys to get the public key of the login agent (whose
  3750.       name is derived from the name of the principal by truncating
  3751.       the last element of the RDN and adding CSS=X509).
  3752.  
  3753.    2) If TA_credentials are not available, look up the public key
  3754.       of the login agent in the naming service.
  3755.  
  3756.     Login agents limit and audit password guesses, and are
  3757.     important when passwords may not be well chosen (as when users
  3758.     are allowed to choose their own).  To fully prevent the
  3759.     password guessing threat, principals may only log onto nodes
  3760.     that already have TA_credentials which can be used to
  3761.     authenticate the login agent.  To support nodes which have no
  3762.     credentials of their own and to allow this procedure to
  3763.     support node initialization, it is possible to network login
  3764.     without TA credentials.
  3765.  
  3766.     A principal who logs into a node that lacks TA credentials is
  3767.     subject to the following subtle security threat:  A penetrator
  3768.     who impersonates the naming service could post his own public
  3769.     key and address as those of the login agent.  This procedure
  3770.  
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  Kaufman           Document Expiration: 10 June 1993       Page 59
  3776.  
  3777.  
  3778.  
  3779.  
  3780.  Internet Draft                    DASS            9 December 1992
  3781.  
  3782.  
  3783.  
  3784.  
  3785.     would then in the process of logging in reveal the the
  3786.     penetrator enough information for the penetrator to mount an
  3787.     unaudited password guessing attack against the principal's
  3788.     credentials.
  3789.  
  3790.  b) Retrieve the encrypted credentials from the naming service or
  3791.     login agent.  In the case of the login agent, the password is
  3792.     one-way hashed to produce proof of knowledge of the password
  3793.     and the hashed value is supplied to the login agent encrypted
  3794.     under its public key as part of the request.
  3795.  
  3796.  c) Decrypt the encrypted credentials structure using a the
  3797.     supplied password. Verify that the decryption was successful
  3798.     by verifying that the resulting structure can be parsed
  3799.     according the the ASN.1 rules for Encrypted_Credentials and
  3800.     that the two included primes when multiplied together produce
  3801.     the included modulus. If the decryption was unsuccessful then
  3802.     the routine returns the `Invalid password' error status. The
  3803.     decryption results in both the Private Key and the Public Key.
  3804.  
  3805.  d) Generate a public/private key pair for the Delegation Key,
  3806.     using the indicated keysize. Key size is likely to be an
  3807.     implementation constant rather than a supplied parameter, with
  3808.     likely values being 384 and 512 bits.  Key sizes generally
  3809.     will have to increase over time as factoring technology and
  3810.     CPU speeds improve.  Delegation keys can be relatively shorter
  3811.     than long term keys because DASS is designed so that
  3812.     compromise of the delegation key after it has expired does not
  3813.     result in a security compromise.  An important advantage of
  3814.     making key size an implementation constant is that nodes can
  3815.     generate key pairs in advance, thus speeding up this procedure.
  3816.     Key generation is the most CPU intensive RSA procedure and
  3817.     could make login annoyingly slow.
  3818.  
  3819.  e) Construct a Login Ticket by signing with the user's private
  3820.     key a combination of the public key, a validity period
  3821.     constructed from the current time and the expiration passed in
  3822.     the call, and the principal UID found in the encrypted-key
  3823.     structure.
  3824.  
  3825.  f) Forget the user's private key.
  3826.  
  3827.  g) Retrieve from the naming service any trusted authority
  3828.     certificates stored with the user's entry. Discard any that
  3829.     are not signed by the user's public key and UID.  An
  3830.     implementation in which the login node has credentials of its
  3831.     own may choose its trusted authority information instead of
  3832.     retrieving and verifying trusted authority certificates from
  3833.     the naming service.  This will have a subtle effect on the
  3834.     security of the resulting system.
  3835.  
  3836.  
  3837.  
  3838.  
  3839.  Kaufman           Document Expiration: 10 June 1993       Page 60
  3840.  
  3841.  
  3842.  
  3843.  
  3844.  Internet Draft                    DASS            9 December 1992
  3845.  
  3846.  
  3847.  
  3848.  
  3849.  h) Construct a credentials structure from:
  3850.  
  3851.    1) Claimant credentials:
  3852.  
  3853.      (i)  Name of the principal from calling parameter
  3854.      (ii) Login Ticket as constructed in (e)
  3855.      (iii)Delegation Private key as constructed in (d)
  3856.      (iv) Public key from the encrypted credentials structure
  3857.  
  3858.    2) No verifier credentials
  3859.  
  3860.    3) Trusted Authorities: for the most recently signed trusted
  3861.       authority certificate (1):
  3862.  
  3863.      (i)  Name of the CA from the subject field of the certificate
  3864.      (ii) Public Key of the CA from the subject public key field
  3865.      (iii)UID of the CA from the subject UID field
  3866.  
  3867.    4) no remote node credentials
  3868.  
  3869.    5) no local node credentials
  3870.  
  3871.    6) no cached outgoing associations
  3872.  
  3873.    7) no cached incoming associations
  3874.  
  3875. 3.9.2 Create Credentials
  3876.  
  3877. Create_credentials(
  3878.                                                    --outputs
  3879.                     Claimant_credentials  Credentials)
  3880.  
  3881. This routine creates an "empty" credentials structure.  It is
  3882. needed in the case of a user logging into a node and obtaining
  3883. node oriented credentials but no global username credentials.
  3884. Because the "combine_credentials" call wants to modify a set of
  3885. user credentials rather than create a new set, this call is
  3886. needed to produce the "shell" for combine_credentials to fill in.
  3887.  
  3888. It is unlikely that any real implementation would support this
  3889. function, but rather would have some functions which combine
  3890. network_login, create_credentials, and combine_credentials in
  3891. whatever ways are supported by that node.
  3892.  
  3893.  
  3894.   (1) There is normally only one Trusted Authority Certificate.
  3895.       If there is more than one then an implementation may
  3896.       choose to maintain a list of all the valid keys. They
  3897.       should all refer to the same CA (UID and name).
  3898.  
  3899.  
  3900.  
  3901.  
  3902.  
  3903.  Kaufman           Document Expiration: 10 June 1993       Page 61
  3904.  
  3905.  
  3906.  
  3907.  
  3908.  Internet Draft                    DASS            9 December 1992
  3909.  
  3910.  
  3911.  
  3912. 3.9.3 Combine Credentials
  3913.  
  3914. Combine_credentials(
  3915.                                                  --inputs
  3916.                     node_credentials      Credentials,
  3917.                     localusername         String,
  3918.                                                  --updated
  3919.                     user_credentials      Credentials)
  3920.  
  3921. This routine is provided by implementations which support the
  3922. notion of local node credentials.  After the node has verified to
  3923. its own satisfaction that the user_credentials are entitled to
  3924. access to a particular local account, this call adds node
  3925. credential information to the user_credential structure.  This
  3926. function may be applied to user_credentials created by
  3927. network_login, create_credentials, or accept_token.
  3928.  
  3929.  a) Fill in the local node credentials substructure of
  3930.     user_credentials as follows:
  3931.  
  3932.    1) Full name of the node: from Full name of the Principal in
  3933.       node_credentials
  3934.  
  3935.    2) Local username on the node: from proxy lookup
  3936.  
  3937.    3) RSA private key of the node: from verifier credentials in
  3938.       node_credentials
  3939.  
  3940.  b) Optionally,  change the trusted authorities to match the
  3941.     trusted authorities from the node credentials.  This is an
  3942.     implementation option, done most likely as a performance
  3943.     optimization.  The only case where this option is required is
  3944.     where no trusted authorities existed in the user credentials
  3945.     (because they were created by create_credentials of
  3946.     accept_token).  Server credentials should generally keep their
  3947.     own trusted authorities.
  3948.  
  3949. It is likely that an implementation will choose not to replicate
  3950. its node credentials in every credentials structure that it
  3951. supports, but rather will maintain some sort of pointer to a
  3952. single copy.  This algorithm is stated as it is only for ease of
  3953. specification.
  3954.  
  3955. 3.9.4 Initialize_server
  3956.  
  3957. initialize_server(
  3958.                                                  --inputs
  3959.                     Name                  Name,
  3960.                     password              String,
  3961.                     TA_credentials        Credentials, --optional
  3962.  
  3963.  
  3964.  
  3965.  
  3966.  
  3967.  Kaufman           Document Expiration: 10 June 1993       Page 62
  3968.  
  3969.  
  3970.  
  3971.  
  3972.  Internet Draft                    DASS            9 December 1992
  3973.  
  3974.  
  3975.  
  3976.  
  3977.                                                  --outputs
  3978.                     Server_credentials    Credentials)
  3979.  
  3980. Somehow a server must get access to its credentials. One way is
  3981. for the credentials to be stored in the naming service like user
  3982. credentials encrypted under a service password. The service then
  3983. needs to gain at startup time access to a service password. This
  3984. may be easier to manage and is not insecure so long as the
  3985. service password is well chosen. Alternately, the service needs
  3986. some mechanism to gain access directly to its credentials. The
  3987. credentials created by this call are intended to be very long
  3988. lived. They do not time out, so a node or server might store them
  3989. in Non-Volatile memory after "initial installation" rather than
  3990. calling this routine at each "boot". These credentials are shared
  3991. between all servers which use the same key. This routine works as
  3992. follows:
  3993.  
  3994.  a) Retrieve from the naming service or login agent the encrypted
  3995.     credentials structure corresponding to the supplied name. See
  3996.     Network_login for a discussion of the use of TA_credentials
  3997.     and login agents.
  3998.  
  3999.  b) Decrypt that structure using a one-way hash of the supplied
  4000.     password. Verify that the decryption was successful. Verify
  4001.     that the public key in the structure matches the private key.
  4002.  
  4003.  c) Retrieve from the naming service any trusted authority
  4004.     certificates stored under the supplied name. Discard any which
  4005.     do not contain the UID from the encrypted credentials
  4006.     structure or are not signed by the key in the encrypted
  4007.     credentials structure.
  4008.  
  4009.  d) Construct a credentials structure from:
  4010.  
  4011.    1) Claimant credentials:
  4012.      (i)   Name of the principal from the calling parameter
  4013.      (ii)  UID of the principal from the encrypted-key structure
  4014.      (iii) No login ticket
  4015.      (iv)  No login secret key
  4016.  
  4017.    2) Verifier credentials:
  4018.      (i)   Server secret key from the encrypted-key structure
  4019.  
  4020.    3) Trusted Authorities: from the most recently signed Trusted
  4021.       Authority Certificate:
  4022.      (i)   Name of CA from the Subject Name field
  4023.      (ii)  UID of the CA from the Subject UID field
  4024.      (iii) Public Key of the CA from the Subject Public Key field
  4025.  
  4026.  
  4027.  
  4028.  
  4029.  
  4030.  
  4031.  Kaufman           Document Expiration: 10 June 1993       Page 63
  4032.  
  4033.  
  4034.  
  4035.  
  4036.  Internet Draft                    DASS            9 December 1992
  4037.  
  4038.  
  4039.  
  4040.    4) no node credentials
  4041.  
  4042.    5) no cached outgoing associations
  4043.  
  4044.    6) no cached incoming associations
  4045.  
  4046. 3.9.5 Generate Server Ticket
  4047.  
  4048. generate_server_ticket(
  4049.                                                  --inputs
  4050.                     expiration            Time interval,
  4051.                                                  --updated
  4052.                     Server_credentials    Credentials)
  4053.  
  4054. Server credentials created by initialize_server can be used to
  4055. accept incoming authentication tokens and can act as
  4056. node_credentials for outgoing authentications, but cannot create
  4057. user_credentials of their own. If a server initiates connections
  4058. on its own behalf, it must have a ticket just like any other user
  4059. might have. That ticket has limited lifetime and the right to act
  4060. on behalf of the server can be delegated. The server cannot,
  4061. however, delegate the right to receive connections intended for
  4062. it. An implementation must come up with a policy for the
  4063. expiration of server tickets and how long before expiration they
  4064. are renewed.  A likely policy is for this procedure to be
  4065. implicitly called by Create_token if there is no current ticket
  4066. present in the credentials.  If so, this interface need not be
  4067. exposed.
  4068.  
  4069. This routine is implemented as follows:
  4070.  
  4071.  a) Generate an RSA public/private key pair.
  4072.  
  4073.  b) Compute a validity interval from the current time and the
  4074.     expiration supplied.
  4075.  
  4076.  c) Construct a login ticket from the RSA public key (from a),
  4077.     validity interval (from b), the UID from the credentials, and
  4078.     signed with the server key in the credentials. (Discard
  4079.     previous Login Ticket if there was one).
  4080.  
  4081.  d) Discard all information in the  Cached Outgoing Contexts.
  4082.  
  4083. 3.9.6 Delete Credentials
  4084.  
  4085. delete_credentials(
  4086.                                                  --updated
  4087.                     credentials           Credentials)
  4088.  
  4089. Erases the secrets in the credentials structure and deallocates
  4090. the storage.
  4091.  
  4092.  
  4093.  
  4094.  
  4095.  Kaufman           Document Expiration: 10 June 1993       Page 64
  4096.  
  4097.  
  4098.  
  4099.  
  4100.  Internet Draft                    DASS            9 December 1992
  4101.  
  4102.  
  4103.  
  4104.  
  4105. 3.10 Authentication Procedures
  4106.  
  4107. The guts of the authentication process takes place in the next
  4108. two calls. When one principal wishes to authenticate to another,
  4109. it calls Create_token and sends the token which results to the
  4110. other. The recipient calls Accept_token and creates a new set of
  4111. credentials. The other calls in this section manipulate the
  4112. received credentials in order to retrieve its contents and verify
  4113. the identity of the token creator.
  4114.  
  4115. 3.10.1  Create Token
  4116.  
  4117. Create_token(
  4118.                                                  --inputs
  4119.                     target_name            Name,
  4120.                     deleg_req_flag         Boolean,
  4121.                     mutual_req_flag        Boolean,
  4122.                     replay_det_req_flag    Boolean,
  4123.                     sequence_req_flag      Boolean,
  4124.                     chan_bindings          Octet String,
  4125.                     Include_principal_name Boolean,
  4126.                     Include_node_name      Boolean,
  4127.                     Include_username       Boolean,
  4128.                                                    --updated
  4129.                     claimant_credentials   Credentials,
  4130.                                                  --outputs
  4131.                     authentication_token   Authentication token,
  4132.                     mutual_authentication_token
  4133.                 Mutual Authentication token,
  4134.                     Shared_key             Shared Key,
  4135.                     instance_identifier    Timestamp)
  4136.  
  4137. This routine is used by the initiator of a connection to create
  4138. an authentication token which will prove its identity. If the
  4139. claimant credentials includes node/account information, the token
  4140. will include node authentication.
  4141.  
  4142. target_name  is the X.500 name of the intended recipient of the
  4143. token.  Only an entity with access to the private key associated
  4144. with that name will be able to verify the created token and
  4145. generate the mutual_authentication_token.
  4146.  
  4147. deleg_req_flag indicates whether the caller wishes to delegate to
  4148. the recipient of the token. If it is set, the delegated_credentials
  4149. returned by Accept_token will be capable of generating tokens on
  4150. behalf of the caller. Node based authentication information
  4151. cannot be delegated. The mutual_req_flag, replay_det_req_flag ,
  4152. and sequence_req_flag are put in the authentication token and
  4153.  
  4154.  
  4155.  
  4156.  
  4157.  
  4158.  
  4159.  Kaufman           Document Expiration: 10 June 1993       Page 65
  4160.  
  4161.  
  4162.  
  4163.  
  4164.  Internet Draft                    DASS            9 December 1992
  4165.  
  4166.  
  4167.  
  4168.  
  4169. passed to the target.  This information is included in the token
  4170. to make it easier to implement the GSSAPI over DASS.  DASS itself
  4171. makes no use of this information.
  4172.  
  4173. In most applications, the purpose of a token exchange is to
  4174. authenticate the principals controlling the two ends of a
  4175. communication channel.  chan_bindings contains an identifier of
  4176. the channel which is being authenticated, and thus its format and
  4177. content should be tied to the underlying communication protocol.
  4178. DASS only guarantees that the information has been communicated
  4179. reliably to the named target. If DASS is used with a
  4180. cryptographically protected channel (such as SP4), this data
  4181. should contain a one-way hash of the key used to encrypt the
  4182. channel. If that channel is multiplexed, the data should also
  4183. include the ID of the subchannel.  If the channel is not
  4184. encrypted, the network must be trusted not to modify data on a
  4185. connection.  The source and target network addresses and a
  4186. connection ID should be included in the chan_bindings at the
  4187. source and checked at the target.  A token exchange also results
  4188. in the two ends sharing a key and an instance identifier.  If
  4189. that key and instance identifier are used to cryptographically
  4190. protect subsequent communications, then chan_bindings need not
  4191. have any cryptographic significance but may be used to
  4192. differentiate multiple entities sharing the public keys of
  4193. communicating principals.  For example, if a service is
  4194. replicated and all replicas share a public key, chan_bindings
  4195. should include something that identifies a single instance of the
  4196. service (such as current address) so that the token cannot be
  4197. successfully presented to more than one of the servers.
  4198.  
  4199. include_principal_name, include_node_name, and include_username
  4200. are flags which determine whether the principal name, node name,
  4201. and/or username from the credentials structure are to be included
  4202. in the token.  This information is made optional in a token so
  4203. that applications which communicate this information out of band
  4204. can produce "compressed" tokens.  If this information is included
  4205. in the token, it will be used to populate the corresponding
  4206. fields in the credentials structure created by Accept_token.
  4207. claimant_credentials   are the credentials of the calling
  4208. procedure.  The secrets contained therein are used to sign the
  4209. token and the trusted authorities are used to securely learn the
  4210. public key of the target.  The cached outgoing contexts portion
  4211. of the credentials may be updated as a side effect of this call.
  4212.  
  4213. The major output of this routine is an  authentication_token which
  4214. can be passed to the target in order to authenticate the caller.
  4215.  
  4216. In addition to returning an authentication token, this routine
  4217.  
  4218.  
  4219.  
  4220.  
  4221.  
  4222.  
  4223.  Kaufman           Document Expiration: 10 June 1993       Page 66
  4224.  
  4225.  
  4226.  
  4227.  
  4228.  Internet Draft                    DASS            9 December 1992
  4229.  
  4230.  
  4231.  
  4232.  
  4233. returns a mutual_authentication_token,  a shared_key, and an
  4234. instance_identifier. The mutual authentication token is the same
  4235. as the one generated by the Accept_token call at the target. If
  4236. the protocol using DASS wishes mutual authentication, the target
  4237. should return this token to the source. The source will compare
  4238. it to the one returned by this routine using Compare_Mutual_Token
  4239. (below) and know that the token was accepted at its proper
  4240. destination.
  4241.  
  4242. The DES key and instance identifier can be used to encrypt or
  4243. sign data to be sent to this target. The key and instance will be
  4244. given to the target by Accept_token, and the key will only be
  4245. known by the two parties to the authentication. If a single set
  4246. of credentials is used to authenticate to the same target more
  4247. than once, the same DES key is likely to be returned each time.
  4248. If the parties wish to protect against the possibility of an
  4249. outside agent mixing and matching messages from one authenticated
  4250. session with those of another, they should include the instance
  4251. identifier in the messages. The instance identifier is a
  4252. timestamp and it is guaranteed that the DES key/instance
  4253. identifier pair will be unique.
  4254.  
  4255. An implementation may wish to "hide" the DES key from calling
  4256. applications by placing it in system storage and providing calls
  4257. which encrypt/decrypt/sign/verify using the key.
  4258.  
  4259. The primary tasks of this routine are to create its output
  4260. parameters. As a side effect, it may also update
  4261. claimant_credentials It's algorithm is as follows:
  4262.  
  4263.  a) The login ticket is checked. If it has passed the end of its
  4264.     lifetime an `Login Ticket Expired' error is returned. If there
  4265.     is a login ticket, but no corresponding private key then an
  4266.     `Invalid credentials' error is returned (this is the case if
  4267.     the credentials were created by an authentication-without-
  4268.     delegation operation).  If there is no login ticket or an
  4269.     expired one and if the long term private key is present in the
  4270.     credentials, an implementation may choose to automatically call
  4271.     create_server_ticket to renew the ticket.
  4272.  
  4273.  b) Create new timestamp using the current time (1).
  4274.  
  4275.  c) The public key and UID of target_name are looked up by calling
  4276.     get_pub_keys, using the target_name and the Trusted Authority
  4277.  
  4278.  
  4279.   (1) This timestamp must be unique for this Shared Key. The
  4280.       timestamp is a 64 bit POSIX time, with a resolution of 1
  4281.       nanosecond An implemen  tation must ensure that timestamps
  4282.       cannot be reused.
  4283.  
  4284.  
  4285.  
  4286.  
  4287.  Kaufman           Document Expiration: 10 June 1993       Page 67
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  Internet Draft                    DASS            9 December 1992
  4293.  
  4294.  
  4295.  
  4296.  
  4297.     section of the claimant_credentials structure. If none is
  4298.     found, an error status is returned. Otherwise, the cached
  4299.     outbound connections portion of credentials are searched
  4300.     (indexed by target Public Key) for a cached Shared key with a
  4301.     validity interval which has not expired. If a suitable one is
  4302.     found skip to step g, else create a cache entry as follows:
  4303.  
  4304.  d) Destination Public Key is the one found looking up the target.
  4305.     A Shared Key is generated at random. A validity interval is
  4306.     chosen according to node policy but not to exceed the validity
  4307.     interval of the ticket in the credentials (if any).
  4308.  
  4309.  e) Create the Encrypted Shared Key, using the public key of the
  4310.     Target, and place in the cache.
  4311.  
  4312.  f) If node authentication credentials are available in the
  4313.     credentials structure, create a "Node Ticket" signature using
  4314.     the node secret and include it in the cache.
  4315.  
  4316.  g) If delegation is requested and no delegator is present in the
  4317.     cache, create one by encrypting the delegation private key
  4318.     under the Shared key. The delegation private key is
  4319.     represented as an ASN.1 data structure containing only one of
  4320.     the primes (p).
  4321.  
  4322.  h) If delegation is not requested and no Shared Key Ticket is in
  4323.     the cache, create one by signing the requisite information
  4324.     with the delegation private key.
  4325.  
  4326.  i) Create the Authenticator.  The contents of the Authenticator
  4327.     (including the channel bindings) are encoded into ASN.1, and
  4328.     the signature is computed. The Authenticator is then
  4329.     re-encoded, without including the Channel Bindings but using
  4330.     the same signature.
  4331.  
  4332.  j) Create output_token as follows:
  4333.    1) Encrypted Shared Key from cache
  4334.    2) Login Ticket from Claimant Credentials (if present)
  4335.    3) Shared Key Ticket from cache (if no delegation and if
  4336.       present)
  4337.    4) Node Ticket from cache (if present)
  4338.    5) Delegator from cache (if delegation and if present)
  4339.    6) Authenticator
  4340.    7) Principal name from credentials (if present and parameter
  4341.       requests this)
  4342.    8) Node name from credentials (if present and parameter request
  4343.       this)
  4344.    9) Local Username from credentials (if present and parameter
  4345.       requests this)
  4346.  
  4347.  
  4348.  
  4349.  
  4350.  
  4351.  Kaufman           Document Expiration: 10 June 1993       Page 68
  4352.  
  4353.  
  4354.  
  4355.  
  4356.  Internet Draft                    DASS            9 December 1992
  4357.  
  4358.  
  4359.  
  4360.  
  4361.  
  4362.  
  4363.  k) Compute Mutual_authentication_token by encrypting the
  4364.     timestamp from the authenticator using the Shared key.
  4365.  
  4366.  l) The instance_identifier is the timestamp. This and the Shared
  4367.     key are returned for use by the caller for further encryption
  4368.     operations (if these are supported).
  4369.  
  4370.  
  4371.  
  4372. 3.10.2 Accept_token
  4373.  
  4374.  
  4375. Accept_token(
  4376.                                                  --inputs
  4377.                     authentication_token  Authentication Token,
  4378.                     chan_bindings         Octet String,
  4379.                                                   --updated
  4380.                     verifying_credentials Credentials,
  4381.                                                  --outputs
  4382.                     accepted_credentials  Credentials,
  4383.                     deleg_req_flag        Boolean,
  4384.                     mutual_req_flag       Boolean,
  4385.                     replay_det_req_flag   Boolean,
  4386.                     sequence_req_flag     Boolean,
  4387.                     mutual_authentication_token
  4388.                                      Mutual authentication token
  4389.                     shared_key            Shared Key,
  4390.                     instance_identifier   Timestamp)
  4391.  
  4392. This routine is used by the recipient of an authentication token
  4393. to validate it.  authentication_token is the token as received;
  4394. chan_bindings is the identifier of the channel being
  4395. authenticated.  See the description of Create_token for
  4396. information on the appropriate contents for chan_bindings.  DASS
  4397. does not enforce any particular content, but checks to assure
  4398. that the same value is supplied to both Create_token and
  4399. Accept_token.
  4400.  
  4401. Verifying_credentials are the credentials of the recipient of the
  4402. token.  They must include the private key of the entity named as
  4403. the target in Create_token or the call will fail.  The cached
  4404. incoming contexts section of the verifying credentials may be
  4405. modified as a side effect of this call.
  4406.  
  4407. Accepted_credentials will contain additional information about
  4408. the token creator. If delegation was requested, these credentials
  4409. can be used to make additional calls to Create_token on the
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  Kaufman           Document Expiration: 10 June 1993       Page 69
  4416.  
  4417.  
  4418.  
  4419.  
  4420.  Internet Draft                    DASS            9 December 1992
  4421.  
  4422.  
  4423.  
  4424. creator's behalf. Whether or not delegation was requested, they
  4425. can also be used in the calls which follow to gain additional
  4426. information about the token creator.
  4427.  
  4428. The  deleg_req_flag  indicates whether the accepted_credentials
  4429. include delegation which can be used by the recipient to act on
  4430. behalf of the principal.  Mutual_req_flag, replay_det_req_flag,
  4431. and  sequence_req_flag are passed through from Create_token in
  4432. support of the GSSAPI.  DASS makes no use of these fields.
  4433.  
  4434. The mutual_authentication_token can be returned to the token
  4435. creator as proof of receipt. In many protocols, this will be used
  4436. by a client to authenticate a server. Only the genuine server
  4437. would be able to compute the mutual_authentication_token from the
  4438. token.
  4439.  
  4440. The shared_key and instance_identifier can be used to encrypt or
  4441. sign data between the two authenticating parties. See
  4442. Create_token.
  4443.  
  4444. This routine verifies the contents of the authentication token in
  4445. the context of the verifying credentials (1) and returns
  4446. information about it.  The algorithm updates a cache of
  4447. information. This cache is not updated if the algorithm
  4448. exits with an error. The algorithm is as follows:
  4449.  
  4450.  a) If there is a Login Ticket, but no Shared Key Ticket or
  4451.     Delegator then exit with error `Invalid Authenticator'. If
  4452.     there is a Shared Key Ticket or Delegator, but no Login Ticket
  4453.     then exit with error `Invalid Authentication Token'.
  4454.  
  4455.     Look up the Encrypted Shared key in the Cached Incoming Contexts
  4456.     of the credentials structure (2). If it is not found then create
  4457.     a new cache entry as follows:
  4458.  
  4459.    1) Encrypted Shared Key, from the Authentication Token.
  4460.  
  4461.    2) Shared Key and Validity Interval, by decrypting the
  4462.       Encrypted Shared Key using the server private key in
  4463.       credentials. If the decryption fails then exit with error
  4464.       `Invalid Authentication Token'.
  4465.  
  4466.  
  4467. (1) In particular the Private Key of the server is used. Also the
  4468.     Cached Incoming Contexts and Incoming Timestamp list is used.
  4469.  
  4470. (2) This cache entry is used during the execution of this
  4471.     routine. An implementation must ensure that references to
  4472.     the cache entry can not be affected by other users modifying
  4473.     the cache.  One way is to use a copy of the cache entry, and
  4474.     update it at exit.
  4475.  
  4476.  
  4477.  
  4478.  
  4479.  Kaufman           Document Expiration: 10 June 1993       Page 70
  4480.  
  4481.  
  4482.  
  4483.  
  4484.  Internet Draft                    DASS            9 December 1992
  4485.  
  4486.  
  4487.  
  4488.  
  4489.  b) Check that the Validity Interval (in the cache entry) includes
  4490.     the current time; return `Invalid Authentication Token' if not.
  4491.  
  4492.     Check the Timestamp is within max-clock-skew of the current
  4493.     time, return `invalid Authentication Token' if not.
  4494.  
  4495.     Reconstruct the Authenticator including the Channel Bindings
  4496.     passed as a parameter.
  4497.  
  4498.     Check that the reconstructed Authenticator is signed by the
  4499.     Shared key. If not then exit with error `Invalid
  4500.     Authentication Token'.
  4501.  
  4502.     Look up the Authenticator Signature in the Received
  4503.     Authenticators. If the same Signature is found in the list
  4504.     then exit with error `Duplicate Authenticator'. Otherwise add
  4505.     the Signature and timestamp to the list.
  4506.  
  4507.     If there is a Login Ticket and the Delegation Public key is in
  4508.     the cache entry, then check that the same key is specified in
  4509.     the Login Ticket, if not then exit with error `Invalid
  4510.     Authentication Token'. Place the Delegation Public key in the
  4511.     cache if it is not already there.
  4512.  
  4513.     If there is a Login Ticket, the Delegation Public key was not
  4514.     previously in the cache entry, and there is a Shared Key
  4515.     Ticket in the Authentication Token, then check that the Shared
  4516.     Key Ticket is signed by the Delegation Public Key in the Login
  4517.     Ticket. If not then exit with error `Invalid Authentication
  4518.     Token'.
  4519.  
  4520.     If a delegator is present in the message then decrypt the
  4521.     delegator using the Shared key. If the private key does not
  4522.     match the Delegation Public key then exit with error
  4523.     `Invalid Authentication Token' (1).
  4524.  
  4525.     Build the delegation credentials data structure as follows:
  4526.  
  4527.     1) Claimant credentials:
  4528.      (i)  Login Ticket from the Authentication token
  4529.      (ii) Delegation Private key from the decrypted delegator if
  4530.            the token is delegating.
  4531.      (iii)Encrypted Shared Key from the Authentication token.
  4532.     2) There are no verifier credentials.
  4533.  
  4534.  
  4535.  
  4536. (1) The prime in  the delegator is used to find the other prime
  4537.     (from the modulus). The division must not have a remainder.
  4538.     Neither prime may be 1. The two primes are then used to
  4539.     reconstruct any other information needed to perform
  4540.     cryptographic operations.
  4541.  
  4542.  
  4543.  Kaufman           Document Expiration: 10 June 1993       Page 71
  4544.  
  4545.  
  4546.  
  4547.  
  4548.  Internet Draft                    DASS            9 December 1992
  4549.  
  4550.  
  4551.  
  4552.  
  4553.  
  4554.    3) Trusted authorities are copied from the verifying_credentials
  4555.       passed to this routine (1).
  4556.    4) Remote node credentials (Node name, Username, Node Ticket)
  4557.    5) There are no local node credentials.
  4558.    6) There are no cached contexts.
  4559.  
  4560.  c)The returned boolean values are obtained from the
  4561.    Authenticator.
  4562.  
  4563.  d)Mutual_authentication_token is computed by encrypting the
  4564.    timestamp from the Authenticator with the Shared key from the
  4565.    cache.
  4566.  
  4567.  e)Instance_identifier is the timestamp from the Authenticator.
  4568.    This and the Shared key are returned to the caller for further
  4569.    encryption operations (if these are supported).
  4570.  
  4571. 3.10.3 Compare Mutual Token
  4572.  
  4573. Compare_mutual_token(
  4574.                                                  --inputs
  4575.                     Generated_token    Mutual authentication token,
  4576.                     Received_token     Mutual authentication token,
  4577.                                                   --outputs
  4578.                     equality_flag         Boolean)
  4579.  
  4580. This routine compares two mutual authentication tokens and tells
  4581. whether they match.  In the expected use, the first is the token
  4582. generated by Create_token at the initiating end and the second is
  4583. the token generated by Accept_token at the accepting end and
  4584. returned to the initiating end.  This routine can be implemented
  4585. as a byte by byte comparison of the two parameters.
  4586.  
  4587. 3.10.4 Get Node Info
  4588.  
  4589. get_node_info(
  4590.                                                  --inputs
  4591.                     accepted_credentials  Credentials,
  4592.                                                  --outputs
  4593.                     nodename              Name,
  4594.                     username              String)
  4595.  
  4596. This routine extracts from accepted credentials the name of the
  4597. node from which the authentication token came and the named
  4598. account on that node. Because this information is not
  4599.  
  4600.  
  4601.   (1) If an implementation is able to obtain the original Trusted
  4602.       Authorities of the Principal then it may do so instead of
  4603.       using the server's Trusted Authorities.
  4604.  
  4605.  
  4606.  
  4607.  Kaufman           Document Expiration: 10 June 1993       Page 72
  4608.  
  4609.  
  4610.  
  4611.  
  4612.  Internet Draft                    DASS            9 December 1992
  4613.  
  4614.  
  4615.  
  4616.  
  4617. cryptographically protected within the token, this information
  4618. can only be regarded as a "hint" by the receiving application.
  4619. It can, however, be verified using Verify_node_name in a
  4620. cryptographically secure manner.  This information will only be
  4621. present if these are accepted credentials and it the caller of
  4622. Create_token set the include_node_name and/or include_username
  4623. flags.
  4624.  
  4625. An actual implementation is not likely to have get_node_info and
  4626. verify_node_name as separate calls.  They are specified this way
  4627. because there are different ways this information might be used.
  4628. For most applications, the nodename and username will be included
  4629. in the token, and a single function might extract and verify them
  4630. (it might in fact be part of accept token).  For other
  4631. applications, the nodename and username will not be in the token
  4632. but rather will be computed from other information passed during
  4633. connection initiation so a call would have to take these as
  4634. inputs.  Still other applications such as ACL evaluators that
  4635. want to support the renaming and aliasing capabilities of DASS
  4636. would defer verifying node information until they came upon an
  4637. ACL which allowed access only from a particular node.  They would
  4638. then verify that the name on the ACL was an authenticatable alias
  4639. for the node which created the token.  All of these uses can be
  4640. defined in terms of calls to get_node_info and verify_node_name.
  4641.  
  4642. 3.10.5 Get Principal UID
  4643.  
  4644. get_principal_uid(
  4645.                                                  --inputs
  4646.                     accepted_credentials  Credentials,
  4647.                                                  --outputs
  4648.                     uid                   UID)
  4649.  
  4650. This routine extracts a principal UID from a set of credentials.
  4651.  
  4652. As with Get_Node_Info, this interface is not likely to appear in
  4653. an actual implementation, but rather will be bundled with other
  4654. routines.  It is specified this way because there might be a
  4655. variety of algorithms by which credentials are evaluated and all
  4656. of them can be defined in terms of these primitives.
  4657.  
  4658. In DASS, it is possible for a principal to have many aliases.
  4659. This can happen either because the principal was given multiple
  4660. names to limit the number of CAs that need to be trusted when
  4661. authenticating to different servers or because the principal's
  4662. name has changed and the old name remains behind as an alias.
  4663. Accept_token returns the name by which the principal identified
  4664. itself when creating its credentials. A service may know the user
  4665. by some alias. The normal way to handle this is for the service
  4666. to know the principal's UID (which is constant over name changes)
  4667.  
  4668.  
  4669.  
  4670.  
  4671.  Kaufman           Document Expiration: 10 June 1993       Page 73
  4672.  
  4673.  
  4674.  
  4675.  
  4676.  Internet Draft                    DASS            9 December 1992
  4677.  
  4678.  
  4679.  
  4680.  
  4681. and to compare it with the UID in the token to identify a likely
  4682. alias situation. It gets the UID from the token using this
  4683. routine. It then confirms the alias by calling
  4684. verify_principal_name.
  4685.  
  4686. The UID is in a signed portion of accepted credentials, but the
  4687. signature may not have been verified at the time this call is
  4688. issued.  The information returned by this routine must therefore
  4689. be regarded as a hint.  If a call to Verify_principal_name
  4690. succeeds, however, then the caller can securely know that the
  4691. name given to that routine  and the UID returned by this one are
  4692. the authenticated source of the token.
  4693.  
  4694. 3.10.6 Get Principal Name
  4695.  
  4696. get_principal_name(
  4697.                                                  --inputs
  4698.                     accepted_credentials  Credentials,
  4699.                                                  --outputs
  4700.                     name                  Name)
  4701. This routine extracts a principal name from a set of credentials.
  4702. This name is the name most recently associated with the
  4703. principal. It may be the name that the principal supplied when
  4704. the credentials were created (in which case it may not have been
  4705. verified yet) or it may be a different name that has been
  4706. verified.
  4707.  
  4708. As with Get_Node_Info and Get_Principal_UID, this routine is not
  4709. likely to appear in an actual implementation, but will be bundled
  4710. in some fashion with related procedures.  The name returned by
  4711. this procedure is not guaranteed to have been cryptographically
  4712. verified.  Verify_Principal_Name performs that function.
  4713.  
  4714. 3.10.7 Get Lifetime
  4715.  
  4716. get_lifetime(
  4717.                                                  --inputs
  4718.                     Claimant_credentials  Credentials,
  4719.                                                  --outputs
  4720.                     lifetime              Duration)
  4721. This routine computes the life remaining in a set of credentials.
  4722. Its most common use would be to know to renew credentials before
  4723. they expire.
  4724.  
  4725. Returns the remaining lifetime of the login ticket in the
  4726. credentials. This can either be the done on the node where the
  4727. original login took place, or at a server which has been
  4728. delegated to. It indicates how much longer these credentials can
  4729. be used for further delegations. This routine will return 0 if
  4730.  
  4731.  
  4732.  
  4733.  
  4734.  
  4735.  Kaufman           Document Expiration: 10 June 1993       Page 74
  4736.  
  4737.  
  4738.  
  4739.  
  4740.  Internet Draft                    DASS            9 December 1992
  4741.  
  4742.  
  4743.  
  4744.  
  4745. the login ticket has passed the end of its life, if there is no
  4746. login ticket, or if  the credentials do not contain the private
  4747. key certified by the ticket (i.e. where they were created by an
  4748. authentication-without-delegation operation).
  4749.  
  4750. 3.10.8 Verify Node Name
  4751.  
  4752. Verify_node_name(
  4753.                                                  --inputs
  4754.                     nodename              Name,
  4755.                     username              String,
  4756.                                                   --updated
  4757.                     verifying_credentials Credentials,
  4758.                     accepted_credentials  Credentials,
  4759.                                                  --outputs
  4760.                     Name matches          Boolean)
  4761.  
  4762. This routine tests whether the originating node of an
  4763. authentication token can be authenticated as having the provided
  4764. name. Like a principal, a node may have multiple aliases. One of
  4765. them may be returned by Get_node_info, but this call allows a
  4766. suspected alias to be verified.  The verifying credentials
  4767. supplied with this call must be the same credentials as were used
  4768. in the Accept_token call. The procedure for completing this
  4769. request is as follows:
  4770.  
  4771.  a) If there is no Node Ticket in the claimant credentials then
  4772.     return False.
  4773.  
  4774.  b) Search the incoming context cache of the verifying credentials
  4775.     for an entry containing the same encrypted shared key as the
  4776.     encrypted shared key subfield of the claimant information of
  4777.     the accepted credentials.  In the steps which follow,
  4778.     references to "the cache" refer to this entry.  If none is
  4779.     found, initialize such an entry as follows:
  4780.  
  4781.    1) Encrypted shared key from the encrypted shared key subfield
  4782.       of the claimant information of the accepted credentials.
  4783.  
  4784.    2) The shared key and validity interval are determined by
  4785.       decrypting the encrypted shared key using the RSA private
  4786.       key in the verifier information of the server credentials.
  4787.       If this procedure is called after a call to Accept_token
  4788.       using the same server credentials (as is required for
  4789.       correct use), the shared key and validity interval must
  4790.       correctly decrypt.  If called in some other context, the
  4791.       results are undefined.  The validity interval is not
  4792.       checked.
  4793.  
  4794.    3) Initialize all other entries in the cache to missing.
  4795.  
  4796.  
  4797.  
  4798.  
  4799.  Kaufman           Document Expiration: 10 June 1993       Page 75
  4800.  
  4801.  
  4802.  
  4803.  
  4804.  Internet Draft                    DASS            9 December 1992
  4805.  
  4806.  
  4807.  
  4808.  
  4809.  c) If there is a "local username on client node" in the cache and
  4810.     it does not match the username supplied as a parameter, return
  4811.     False.
  4812.  
  4813.  d) If there is a "name of client node" in the cache and it
  4814.     matches the nodename supplied as a parameter:
  4815.  
  4816.    1) Set the "Full name of the node" subfield of the remote node
  4817.       authentication field of the accepted credentials to be the
  4818.       nodename supplied as a parameter.
  4819.  
  4820.    2) Set the "Local Username on the node" subfield of the remote
  4821.       node authentication field of the accepted credentials to be
  4822.       the username supplied as a parameter.
  4823.  
  4824.    3) return True.
  4825.  
  4826.  e) Call the Get_Pub_Keys subroutine with the server_credentials,
  4827.     the nodename supplied as a parameter, and Try_Hard=False.
  4828.  
  4829.  f) If "Public Key of Client Node" is missing from the cache,
  4830.     check all of the Public keys returned to see if one verifies
  4831.     the node ticket.  If one does, set the "Public Key of Client
  4832.     Node" and "UID of Client Node" fields in the cache to be the
  4833.     PK/UID pair that verified the ticket and set the "Local
  4834.     Username on Client node" field to be the username supplied as
  4835.     a parameter..
  4836.  
  4837.  g) If any of the Public Key/UID pairs match the "Public Key of
  4838.     Client Node" and "UID of Client Node" fields in the cache,
  4839.     then:
  4840.  
  4841.    1) Set the "name of client node" in the cache equal to the
  4842.       nodename supplied as a parameter.
  4843.  
  4844.    2) Set the "Full name of the node" subfield of the remote node
  4845.       authentication field of the accepted credentials to be the
  4846.       nodename supplied as a parameter.
  4847.  
  4848.    3) Set the "Local Username on the node" subfield of the remote
  4849.       node authentication field of the accepted credentials to be
  4850.       the username supplied as a parameter.
  4851.  
  4852.    4) Return True.
  4853.  
  4854.  h) If none of them match, call Get_Pub_Keys again with
  4855.     Try_Hard=True and repeat steps 6 & 7.  If Step 7 fails a
  4856.     second time, return False.
  4857.  
  4858.  
  4859.  
  4860.  
  4861.  
  4862.  
  4863.  Kaufman           Document Expiration: 10 June 1993       Page 76
  4864.  
  4865.  
  4866.  
  4867.  
  4868.  Internet Draft                    DASS            9 December 1992
  4869.  
  4870.  
  4871.  
  4872. 3.10.9 Verify Principal Name
  4873.  
  4874. Verify_principal_name(
  4875.                                                  --inputs
  4876.                     principal_name        Name,
  4877.                                                   --updated
  4878.                     verifier_credentials  Credentials,
  4879.                     claimant_credentials  Credentials,
  4880.                                                  --outputs
  4881.                     Name matches          Boolean)
  4882.  
  4883. This routine tests (in the context of the verifier credentials)
  4884. whether the claimant credentials are authenticatable as being
  4885. those of the named principal.  This procedure is called with a
  4886. set of accepted credentials to authenticate their source, or with
  4887. a set of credentials produced by network_login to authenticate
  4888. the creator of those credentials.  If the claimant credentials
  4889. were created by Accept_token, then the verifier credentials
  4890. supplied in this call must be the same as those used in that
  4891. call.  The procedure for completing this request is as follows:
  4892.  
  4893.  a) If there is no Login Ticket in the claimant credentials, then
  4894.     return False.
  4895.  
  4896.  b) If the current time is not within the validity interval of the
  4897.     Login Ticket, then return False.
  4898.  
  4899.  c) If there is an Encrypted Shared Key present in the Claimant
  4900.     information field of the claimant credentials, then find or
  4901.     create a matching cache entry in the Cached Incoming Contexts
  4902.     of the verifier credentials.  In the description which
  4903.     follows, references to "the cache" refer to this entry.  If
  4904.     the cache entry must be created, its contents is set to be as
  4905.     follows:
  4906.  
  4907.    1) Encrypted shared key from the encrypted shared key subfield
  4908.       of the claimant information of the accepted credentials.
  4909.  
  4910.    2) The shared key and validity interval are determined by
  4911.       decrypting the encrypted shared key using the RSA private
  4912.       key in the verifier information of the server credentials.
  4913.       If this procedure is called after a call to Accept_token
  4914.       using the same server credentials (as is required for
  4915.       correct use), the shared key and validity interval must
  4916.       correctly decrypt.  If called in some other context, the
  4917.       results are undefined.  The validity interval is not
  4918.       checked.
  4919.  
  4920.    3)Initialize all other entries in the cache to missing.
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  Kaufman           Document Expiration: 10 June 1993       Page 77
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  Internet Draft                    DASS            9 December 1992
  4933.  
  4934.  
  4935.  
  4936.  
  4937.  d) If there is a cache entry and if the "Public Key of Client
  4938.     Principal" field is present and if the "UID of Client
  4939.     Principal" field is present and matches the UID in the Login
  4940.     Ticket, then:
  4941.  
  4942.    1) Set the Public Key of the principal field in the Claimant
  4943.       information to be the Public Key of Client Principal.
  4944.  
  4945.    2) If the "Full name of the principal" field is missing from
  4946.       the claimant information of the claimant credentials, then
  4947.       set it to the "Name of Client Principal" field from the
  4948.       cache.
  4949.  
  4950.  e) If there is a cache entry and if the "Name of Client
  4951.     Principal" field is present and if it matches the principal
  4952.     name supplied to this routine and if the UID in the cache
  4953.     matches the UID in the Login Ticket, return True.
  4954.  
  4955.  f) Call the Get_Pub_Keys subroutine with the name and verifier
  4956.     credentials supplied to this routine and Try_Hard=FALSE.
  4957.     Ignore any keys retrieved where the corresponding UID does not
  4958.     match the UID in the claimant credentials.
  4959.  
  4960.  g) If the Public Key of the principal is missing from the
  4961.     claimant information of the claimant credentials, then attempt
  4962.     to verify the signature on the login ticket with each public
  4963.     key returned by Get_Pub_Keys.  If verification succeeds:
  4964.  
  4965.    1) Set the Public Key of the principal in the claimant
  4966.       information of the claimant credentials to be the Public Key
  4967.       that verified the ticket.
  4968.  
  4969.    2) If the Full name of the principal in the claimant
  4970.       information of the claimant credentials is missing, set it
  4971.       to the name supplied to this routine.
  4972.  
  4973.    3) If there is a cache entry, set the Name of Client Principal
  4974.       to be the name supplied to this routine, the UID of Client
  4975.       Principal to be the UID from the Login Ticket, and the
  4976.       Public Key of Client Principal to be the Public Key that
  4977.       verified the ticket.
  4978.  
  4979.    4) Return True.
  4980.  
  4981.  h) If the Public Key of the principal is present in the claimant
  4982.     information of the claimant credentials, then see if it
  4983.     matches any of the public keys returned by Get_Pub_Keys.  If
  4984.     one of them matches:
  4985.  
  4986.  
  4987.  
  4988.  
  4989.  
  4990.  
  4991.  Kaufman           Document Expiration: 10 June 1993       Page 78
  4992.  
  4993.  
  4994.  
  4995.  
  4996.  Internet Draft                    DASS            9 December 1992
  4997.  
  4998.  
  4999.  
  5000.  
  5001.    1) If the Full name of the principal in the claimant
  5002.       information of the claimant credentials is missing, set it
  5003.       to the name supplied to this routine.
  5004.  
  5005.    2) If there is a cache entry, set the Name of Client Principal
  5006.       to be the name supplied to this routine, the UID of Client
  5007.       Principal to be the UID from the Login Ticket, and the
  5008.       Public Key of Client Principal to be the Public Key that
  5009.       verified the ticket.
  5010.  
  5011.    3) Return True.
  5012.  
  5013.  i) If steps 7 & 8 fail, retry the call to Get_Pub_Keys with
  5014.     Try_Hard=TRUE, and retry steps 7 & 8.  If they fail again,
  5015.     return false.
  5016.  
  5017.  
  5018. 3.10.10 Get Pub Keys
  5019.  
  5020. Get_Pub_Keys(
  5021.                                                  --inputs
  5022.                     TA_credentials     Credentials
  5023.                     Try_Hard           Boolean,
  5024.                     Target Name        Name,
  5025.                                                  --outputs
  5026.                     Pub_keys           Set of Public key/UID pairs
  5027.  
  5028. This common subroutine is used in the execution of Create_Token,
  5029. Verify_Principal_Name, and Verify_Node_Name.  Given the name of a
  5030. principal, it retrieves a set of public key/UID pairs which
  5031. authenticate that principal (normally only one pair).  It does
  5032. this by retrieving from the naming service a series of
  5033. certificates, verifying the signatures on those certificates, and
  5034. verifying that the sequence of certificates constitute a valid
  5035. "treewalk".
  5036.  
  5037. The credentials structure passed into this procedure represent a
  5038. starting point for the treewalk.  Included in these credentials
  5039. will be the public key, UID, and name of an authority that is
  5040. trusted to authenticate all remote principals (directly or
  5041. indirectly).
  5042.  
  5043. The "Try_Hard" bit is a specification anomaly resulting from the
  5044. fact that caches maintained by this routine are not transparent
  5045. to the calling routines.  It tells this procedure to bypass
  5046. caches when doing all name service lookups because the
  5047. information in caches is believed to be stale.  In general, a
  5048. routine will call Get_Pub_Keys with Try_Hard set false and try to
  5049. use the keys returned.  If use of those keys fails, the calling
  5050. routine may call this routine again with Try_Hard set true in
  5051.  
  5052.  
  5053.  
  5054.  
  5055.  Kaufman           Document Expiration: 10 June 1993       Page 79
  5056.  
  5057.  
  5058.  
  5059.  
  5060.  Internet Draft                    DASS            9 December 1992
  5061.  
  5062.  
  5063.  
  5064.  
  5065. hopes of getting additional keys.  Routinely calling this routine
  5066. with Try_Hard set true is likely to have adverse performance
  5067. implications but would not affect the correctness or the security
  5068. of the operation.
  5069.  
  5070. The name supplied is the full X.500 name of the principal for
  5071. whom public keys are needed as part of some authentication
  5072. process.
  5073.  
  5074. This procedure securely learns the public keys and UIDs of
  5075. foreign principals by constructing a valid chain of certificates
  5076. between its trusted TA and the certificate naming the foreign
  5077. principal.  In the simplest case, where the TA has signed a
  5078. certificate for the foreign principal, the chain consists of a
  5079. single certificate.  Otherwise, the chain must consist of a
  5080. series of certificates where the first is signed by the TA, the
  5081. last is a certificate for the foreign principal, and the subject
  5082. of each principal in the chain is the issuer of the next.
  5083. What follows is first a definition of what constitutes a valid
  5084. chain of certificates followed by a model algorithm which
  5085. constructs all of (and only) the valid chains which exist between
  5086. the TA and the target name.
  5087.  
  5088. In order to limit the implications of the compromise of a single
  5089. CA, and also to limit the complexity of the search of the
  5090. certificate space, there are restrictions on what constitutes a
  5091. valid chain of certificates from the TA to the Name provided.
  5092. The only CAs whose compromise should be able to compromise an
  5093. authentication are those controlling directories that are
  5094. ancestors of one of the two names and that are not above a common
  5095. ancestor.  Therefore, only certificates signed by those CAs will
  5096. be considered valid in a certificate chain.  Normally, the CA for
  5097. a directory is expected to certify a public key and UID for the
  5098. CA of each child directory and one parent directory.  A CA may
  5099. also certify another CA for some remote part of the naming
  5100. hierarchy, and such certificates are necessary if there are no
  5101. CAs assigned to directories high in the naming hierarchy.
  5102.  
  5103. A certificate chain is considered valid if it meets the following
  5104. criteria:
  5105.  
  5106.  a) It must consist of zero or more  parent certificates, followed
  5107.     by zero or one   cross certificates, followed by zero or more
  5108.     child certificates.
  5109.  
  5110.  b) The number of parent certificates may not exceed the number of
  5111.     levels in the naming hierarchy between the TA name and the
  5112.     name of the least common ancestor in the naming hierarchy
  5113.     between the TA name and the target name.
  5114.  
  5115.  
  5116.  
  5117.  
  5118.  
  5119.  Kaufman           Document Expiration: 10 June 1993       Page 80
  5120.  
  5121.  
  5122.  
  5123.  
  5124.  Internet Draft                    DASS            9 December 1992
  5125.  
  5126.  
  5127.  
  5128.  
  5129.  c) Each  parent certificate must be stored in the naming service
  5130.     under the entry of its issuer.
  5131.  
  5132.  d) The subject of the cross certificate (if any) must be an
  5133.     ancestor of the target name but must be a longer name than the
  5134.     least common ancestor of the TA name and the target name.
  5135.  
  5136.  e) The cross certificate (if any) must have been stored in the
  5137.     naming service under the entry of its issuer or there must
  5138.     have been an indication in the naming service that
  5139.     certificates signed by this issuer may be stored with their
  5140.     subjects.
  5141.  
  5142.  f) The issuer of each parent certificate does not have stored
  5143.     with it in the naming service a cross certificate with the
  5144.     same issuer whose subject is an ancestor of the target name.
  5145.  
  5146.  g) Each child certificate must be stored in the naming service
  5147.     under the entry of its subject.
  5148.  
  5149.  h) The subject of each child certificate does not have associated
  5150.     with it in the naming service a cross certificate with the
  5151.     same subject whose issuer is the same as the issuer of any of
  5152.     the parent certificates or the cross certificate of the chain.
  5153.  
  5154.  i) The subject of each certificate must be the issuer of the
  5155.     certificate that follows in the chain.  The equality test can
  5156.     be met by either of two methods:
  5157.  
  5158.    1) The public key of the subject in the earlier certificate
  5159.       verifies the signature of the later and the subject UID in
  5160.       the earlier certificate is equal to the issuer UID in the
  5161.       later; or
  5162.  
  5163.    2) The public key of the subject in the earlier certificate
  5164.       verifies the signature of the later, the earlier lacks a
  5165.       subject UID and/or the later lacks an issuer UID and the
  5166.       name of the subject in the earlier certificate is equal to
  5167.       the name of the issuer in the later.
  5168.  
  5169.  j) The Public Key of the TA verifies the signature of the first
  5170.     certificate.
  5171.  
  5172.  k) The UID of the TA equals the UID of the issuer of the first
  5173.     certificate  or the UID is missing on one or both places and
  5174.     the name of the TA equals the name of the issuer of the first
  5175.     certificate.
  5176.  
  5177.  
  5178.  
  5179.  
  5180.  
  5181.  
  5182.  
  5183.  Kaufman           Document Expiration: 10 June 1993       Page 81
  5184.  
  5185.  
  5186.  
  5187.  
  5188.  Internet Draft                    DASS            9 December 1992
  5189.  
  5190.  
  5191.  
  5192.  
  5193.  l) All of the certificates are valid X.509 encodings and the
  5194.     current time is within all of their validity intervals.
  5195.  
  5196. If a chain is valid, the name which it authenticates can be
  5197. constructed as follows:
  5198.  
  5199.  a) If the chain contains a cross certificate, the name
  5200.     authenticated can be constructed by taking the subject name
  5201.     from the cross certificate and appending to it a relative name
  5202.     for each child certificate which follows.  The relative name
  5203.     is the extension by which the subject name in the child
  5204.     certificate extends the issuer name.
  5205.  
  5206.  b) If the chain does not contain a cross certificate, the name
  5207.     authenticated can be constructed by taking the TA name,
  5208.     truncating from it the last  n name components where  n is the
  5209.     number of  parent certificates in the chain, and appending to
  5210.     the result a relative name for each child certificate.  The
  5211.     relative name is the extension by which the subject name in
  5212.     the child certificate extends the issuer name.
  5213.  
  5214. In the common case, the authenticated name will be the subject
  5215. name in the last certificate.  The authenticated name is
  5216. constructed by the rules above to deal with namespace
  5217. reorganization.  If a branch of the namespace is renamed (due to,
  5218. for example, a corporate acquisition or reorganization), only the
  5219. certificates around the break point need to be regenerated.
  5220. Certificates below the break will continue to contain the old
  5221. names (until renewed), but the algorithms above assure the
  5222. principals in that branch will be able to authenticate as their
  5223. new names.  Further, if the certificates at the branch point are
  5224. maintained for both the old and new names for an interim period,
  5225. principals in the moved branch will be able to authenticate as
  5226. either their old or new names for that interim period without
  5227. having duplicate certificates.
  5228.  
  5229. A final complication that the algorithm must deal with is the
  5230. location of  cross certificates.  If a key is compromised or for
  5231. some other reason it is important to revoke a certificate ahead
  5232. of its expiration, it is removed from the naming service.  This
  5233. algorithm will only use certificates that it has recently
  5234. retrieved from the naming service, so revocation is as effective
  5235. as the mechanisms that prevent impersonation of the naming
  5236. service.   There are plans to eventually use DASS mechanisms to
  5237. secure access to the naming service; until they are in place,
  5238. name service impersonation is a theoretical threat to the
  5239. security of revocation.  Opinions differ as to whether it is a
  5240. practical threat.   Child certificates are always stored with the
  5241. subject and will not be found unless stored in the name server of
  5242.  
  5243.  
  5244.  
  5245.  
  5246.  
  5247.  Kaufman           Document Expiration: 10 June 1993       Page 82
  5248.  
  5249.  
  5250.  
  5251.  
  5252.  Internet Draft                    DASS            9 December 1992
  5253.  
  5254.  
  5255.  
  5256.  
  5257. the subject.    Parent  certificates are always stored with the
  5258. issuer and will not be found unless stored in the name server of
  5259. the issuer.  For best security, cross certificates should be
  5260. stored with the issuer because the name server for the subject
  5261. may not be adequately trustworthy to perform revocation.  There
  5262. are performance and availability penalties, however, in doing so.
  5263. The architecture and the algorithm therefore support storing
  5264. cross certificates with either the issuer or the subject.  There
  5265. must be some sort of flag in the name service associated with the
  5266. issuer saying whether cross certificates from that issuer are
  5267. permitted to be stored in the subject's name service entry, and
  5268. if that flag is set such certificates will be found and used.
  5269.  
  5270. In order to make revocation effective, DASS must assure that
  5271. naming service caches do not become arbitrarily stale (the
  5272. allowed age of a cache entry is included in the sum of times with
  5273. together make up the revocation time).  If DASS uses a naming
  5274. service such as DNS that does not time out cache entries, it must
  5275. bypass cache on all calls and (to achieve reasonable performance)
  5276. maintain its own naming service cache.  It may be advantageous to
  5277. maintain a cache in any case so the that the fact that the
  5278. certificates have been verified can be cached as well as the fact
  5279. that they are current.
  5280.  
  5281. 3.10.10.1 Basic Algorithm
  5282.  
  5283. For ease of exposition, this first description will ignore the
  5284. operation of any caches.  Permissible modifications to take
  5285. advantage of caches and enhance performance will be covered in
  5286. the next section.  This path will be followed if the Try_Hard bit
  5287. is set True on the call.
  5288.  
  5289. Rather than trying construct all possible chains between the TA
  5290. and the name to be authenticated (in the event of multiple
  5291. certificates per principal, there could be exponentially many
  5292. valid chains), this algorithm computes a set of PK/UID/Name
  5293. triples that are valid for each principal on the path between the
  5294. TA and the name to be authenticated.  By doing so, it minimizes
  5295. the processing of redundant information.
  5296.  
  5297.  a) Determining path and initialization
  5298.  
  5299.     Several state variables are manipulated during the tree walk.
  5300.     These are called:
  5301.  
  5302.    1) Current-directory-name
  5303.       This is the name indicating the current place in the tree
  5304.       walk.  Initially, this is the name of the TA.
  5305.  
  5306.  
  5307.  
  5308.  
  5309.  
  5310.  
  5311.  Kaufman           Document Expiration: 10 June 1993       Page 83
  5312.  
  5313.  
  5314.  
  5315.  
  5316.  Internet Draft                    DASS            9 December 1992
  5317.  
  5318.  
  5319.  
  5320.  
  5321.    2) Least-Common-Ancestor-Name
  5322.       This is the portion of the names which is common to both the
  5323.       CA and the Target.  This is computed at initialization and
  5324.       does not change during the treewalk.
  5325.  
  5326.    3) Trusted-Key-Set
  5327.       For each name which is an ancestor of either the TA or the
  5328.       Target but not of the Least-Common-Ancestor, a list of
  5329.       PK/UID/Name triples.  This is initialized to a single triple
  5330.       from the TA information in the supplied credentials.
  5331.  
  5332.    4) Search-when-descending
  5333.       This is a list of PK/UID/Name triples of issuers that will
  5334.       be trusted when descending the tree.  This set is initially
  5335.       empty.
  5336.  
  5337.    5) Saved-RDNs
  5338.       This is a sequence of Relative Distinguished Names (RDNs)
  5339.       stripped off the right of the target name to form
  5340.       Least-common-ancestor-name.  This "stack" is initially empty
  5341.       and is populated during Step 3.
  5342.  
  5343.  b) Ascending the "TA side" of the tree
  5344.  
  5345.     While Current-directory-name is not identical to
  5346.     Common-point-Name the algorithm moves up the tree. At each
  5347.     step it does the following operations.
  5348.  
  5349.    1) Find all cross certificates stored in the naming service
  5350.       under Current-directory-name in which the subject is an
  5351.       ancestor of the principal to be authenticated or an
  5352.       indication that cross certificates from this issuer are
  5353.       stored in the subject entry.  If there is an indication that
  5354.       such certificates are stored in the subject entry, copy all
  5355.       triples in Trusted-Key-Set for Current-directory-name into
  5356.       the "Search-when-descending" list.  If any such certificates
  5357.       are found, filter them to include only those which meet the
  5358.       following criteria:
  5359.  
  5360.      (i)  For some triple in the Trusted-Key-Set corresponding to
  5361.           the Current-directory-name, the public key in the triple
  5362.           verifies the signature on the certificate  and either the
  5363.           UID in the triple matches the issuer UID in the
  5364.           certificate  or the UID in the triple and/or the
  5365.           certificate is missing and the name in the triple matches
  5366.           the issuer name in the certificate.
  5367.  
  5368.      (ii) No certificates were found signed by this issuer in which
  5369.           the subject name is longer than the subject name in this
  5370.           certificate (i.e. if there are cross certificates to two
  5371.  
  5372.  
  5373.  
  5374.  
  5375.  Kaufman           Document Expiration: 10 June 1993       Page 84
  5376.  
  5377.  
  5378.  
  5379.  
  5380.  Internet Draft                    DASS            9 December 1992
  5381.  
  5382.  
  5383.  
  5384.           different ancestors, accept only those which lead to the
  5385.           closest ancestor).
  5386.  
  5387.      (iii)The current time is within the validity interval of the
  5388.           certificate.
  5389.  
  5390.    2) If any cross certificates were found (whether or not they
  5391.       were all eliminated as part of the filtering process), set
  5392.       Current-directory-name to the longest name that was found in
  5393.       any certificate and construct a set of PK/UID/Name triples
  5394.       for that name from the certificates which pass the filter
  5395.       and place them in the Trusted Key Set associated with their
  5396.       subject.  Exit the ascending tree loop at this point and
  5397.       proceed directly to step 3.  Note that this means that if
  5398.       there are cross certificates to an ancestor of the target
  5399.       but they are all rejected (for example if they have
  5400.       expired), the treewalk will   not construct a chain through
  5401.       the least common ancestor and will ultimately fail unless a
  5402.       crosslink from a lower ancestor is found stored with its
  5403.       subject.  This is a security feature.
  5404.  
  5405.    3) If no cross certificates are found, find all the parent
  5406.       directory certificates for the directory whose name is in
  5407.       the Current-directory-name.  Filter these to find only those
  5408.       which meet the following criteria:
  5409.  
  5410.      (i)  The current time is within the validity interval.
  5411.  
  5412.      (ii) For some triple corresponding to the
  5413.           Current-directory-name, the public key in the triple
  5414.           verifies the signature on the certificate  and either  the
  5415.           UID in the triple matches the issuer UID in the
  5416.           certificate  or the UID in the triple and/or the
  5417.           certificate is missing and the name in the triple matches
  5418.           the issuer name in the certificate.
  5419.  
  5420.    4) Construct PK/UID/Name triples from the remaining
  5421.       certificates for the directory whose name is constructed by
  5422.       stripping the rightmost simple name from the
  5423.       Current-directory-name and place them in the Trusted-Key-Set.
  5424.  
  5425.    5) Strip the rightmost simple name of the
  5426.       Current-directory-name.
  5427.  
  5428.    6) Repeat from step (a) (testing to see if
  5429.       current-directory-name is the same as Common-point-Name).
  5430.  
  5431.  c) Searching the "target side" of the tree for a crosslink:
  5432.  
  5433.    1) Initialization: set Current-directory-name to the name
  5434.       supplied as input to this procedure.
  5435.  
  5436.  
  5437.  
  5438.  
  5439.  Kaufman           Document Expiration: 10 June 1993       Page 85
  5440.  
  5441.  
  5442.  
  5443.  
  5444.  Internet Draft                    DASS            9 December 1992
  5445.  
  5446.  
  5447.  
  5448.    2) Retrieve from the naming service all cross certificates
  5449.       associated with Current-directory-name.  Filter to only
  5450.       those that meet the following criteria:
  5451.  
  5452.      (i)  The current time is within their validity interval.
  5453.  
  5454.      (ii) The subject name is equal to Current-directory-name.
  5455.  
  5456.      (iii)For some PK/UID/Name triple in the
  5457.           "Search-when-descending" list compiled while ascending
  5458.           the tree, the Public Key verifies the signature on the
  5459.           certificate and  either the UID matches the issuer UID in
  5460.           the certificate   or a UID is missing from the triple
  5461.           and/or the certificate and the Name in the triple matches
  5462.           the issuer name in the certificate.
  5463.  
  5464.      (iv) There are no certificates found meeting criteria (ii) and
  5465.           (iii) matching a PK/UID/Name triple in the
  5466.           Search-when-descending list whose subject is a directory
  5467.           lower in the naming hierarchy.
  5468.  
  5469.    3) If any qualifying certificates are found, construct
  5470.       PK/UID/Name triples for each of them; these should replace
  5471.       rather than supplement any triples already in the
  5472.       Trusted-key-set for that directory.
  5473.  
  5474.    4) If after steps (b) and (c), there are no PK/UID/Name triples
  5475.       corresponding to Current-directory-name in Trusted-Key-Set,
  5476.       shorten Current-directory-name by one RDN (pushing it onto
  5477.       the Saved-RDNs stack) and repeat this process until
  5478.       Current-directory-name is equal to
  5479.       Least-common-ancestor-name  or there is at least one triple
  5480.       in Trusted-key-set corresponding to Current-directory-name.
  5481.  
  5482.  d) Descending the tree
  5483.  
  5484.     While the list Saved-RDNs is not Empty the algorithm moves
  5485.     down the tree. At each step it does the following operations.
  5486.  
  5487.    1) Remove the first RDN from Saved-RDNs and append it to the
  5488.       Current-directory-name.
  5489.  
  5490.    2) Find all the child directory certificates for the directory
  5491.       whose name is in the current-directory-name.
  5492.  
  5493.    3) Filter these certificates to find only those which meet the
  5494.       following criteria:
  5495.  
  5496.      (i)  The current time is within the validity interval.
  5497.  
  5498.      (ii) For some PK/UID/Name triple in the Current-key-set for
  5499.  
  5500.  
  5501.  
  5502.  
  5503.  Kaufman           Document Expiration: 10 June 1993       Page 86
  5504.  
  5505.  
  5506.  
  5507.  
  5508.  Internet Draft                    DASS            9 December 1992
  5509.  
  5510.  
  5511.  
  5512.           the parent directory, the Public Key verifies the
  5513.           signature on the certificate and either the UID matches
  5514.           the issuer UID of the certificate   or the UID is missing
  5515.           from the triple and/or the certificate and the Name in
  5516.           the triple matches the issuer name in the certificate.
  5517.  
  5518.      (iii)The issuer name in the certificate is a prefix of the
  5519.           subject name and the difference between the two names is
  5520.           the final RDN of Current-directory-name.
  5521.  
  5522.    4) Take the key, UID, and name from each remaining certificate
  5523.       and form a new triple corresponding to
  5524.       Current-directory-name in Trusted-Key-Set. If this set is
  5525.       empty then the algorithm exits with the
  5526.       'Incomplete-chain-of-trustworthy-CAs' error condition.
  5527.  
  5528.    5) repeat from step (a), appending a new simple name to
  5529.       Current-directory-name.
  5530.  
  5531.  e) Find public keys:
  5532.     If there are no triples in the Trusted-Key-Set for the named
  5533.     principal, then the algorithm exits with the `Target-has-no-keys-w
  5534.     error condition. Otherwise, the Public Key and UID are
  5535.     extracted from each pair, duplicates are eliminated, and this
  5536.     set is returned as the Pub_keys.
  5537.  
  5538. 3.10.10.2 Allowed Variations - Caching
  5539.  
  5540. Some use of caches can be implemented without affecting the
  5541. semantics of the Get_Pub_Keys routine.  For example, a
  5542. crypto-cache could remember the public key that verified a
  5543. signature in the past and could avoid the verification operation
  5544. if the same key was used to verify the same data structure again.
  5545. In some cases, however, it is impossible (or at least
  5546. inconvenient) for a cache implementation to be completely
  5547. transparent.
  5548.  
  5549. In particular, for good performance it is important that
  5550. certificates not be re-retrieved from the naming service on every
  5551. authentication.  This must be balanced against the need to have
  5552. changes to the contents of the naming service be reflected in
  5553. DASS calls on a timely basis.  There are two cases of interest:
  5554. changes which cause an authentication which previously would have
  5555. succeeded to fail and changes which cause an authentication which
  5556. previously would have failed to succeed.  These two cases are
  5557. subject to different time constraints.
  5558.  
  5559. In general, changes that cause authentication to succeed must be
  5560. reflected quite quickly - on the order of minutes.  If a user
  5561. attempts an operation, it fails, the user tracks down a system
  5562. manager and causes the appropriate updates to take place, and the
  5563.  
  5564.  
  5565.  
  5566.  
  5567.  Kaufman           Document Expiration: 10 June 1993       Page 87
  5568.  
  5569.  
  5570.  
  5571.  
  5572.  Internet Draft                    DASS            9 December 1992
  5573.  
  5574.  
  5575.  
  5576.  
  5577. user retries the operation, it is unacceptable for the operation
  5578. to continue to fail for an extended period because of stale
  5579. caches.
  5580.  
  5581. Changes that cause authentication to fail must be reflected
  5582. reliably within a bounded period of time for security reasons.
  5583. If a user leaves the company, it must be possible to revoke his
  5584. ability to authenticate within a relatively short period of time
  5585. - say hours.
  5586.  
  5587. These constraints mean that a naming service cache which contains
  5588. arbitrarily old information is unacceptable.  To meet the second
  5589. constraint, naming service cache entries must be timed out within
  5590. a reasonable period of time unless in implementation verifies
  5591. that the certificate is still present (a crypto-cache which
  5592. lasted longer would be legal; rather than deleting a name service
  5593. cache entry, in implementation might instead verify that the
  5594. entry was still present in the naming service.  This would avoid
  5595. repeating the cryptographic "verify").
  5596.  
  5597. In order to assure that information cached for even a few hours
  5598. not deny authentication for that extended period, it must be
  5599. possible to bypass caches when the result would otherwise be a
  5600. failure.  Since the performance of authentication failures is not
  5601. a serious concern, it is acceptable to expect that before an
  5602. operation fails a retry will be made to the naming service to see
  5603. if there are any new relevant certificates (or in certain obscure
  5604. conditions, to see if any relevant certificates have been
  5605. deleted).
  5606.  
  5607. If on a call to Get_Pub_Keys, the Try_Hard bit is True, then this
  5608. procedure must return results based on the contents of the naming
  5609. service no more than five minutes previous (this would normally
  5610. be accomplished by ignoring name service caches and making all
  5611. operations directly to the naming service).  If the Try_Hard bit
  5612. is False, this procedure may return results based on the contents
  5613. of the naming service any time in the previous few hours, in the
  5614. sense that it may ignore any certificate added in the previous
  5615. few hours and may use any certificate deleted in the previous few
  5616. hours.  Procedures which call this routine with Try_Hard set to
  5617. false must be prepared to call it again with Try_Hard True if
  5618. their operation fails possibly from this result.
  5619.  
  5620. The exact timer values for "five minutes" and "a few hours" are
  5621. expected to be implementation constants.
  5622.  
  5623. In the envisioned implementation, the entire "ascending treewalk"
  5624. is retrieved, verified, and its digested contents cached when a
  5625. principal first establishes credentials.  A mechanism should be
  5626.  
  5627.  
  5628.  
  5629.  
  5630.  
  5631.  Kaufman           Document Expiration: 10 June 1993       Page 88
  5632.  
  5633.  
  5634.  
  5635.  
  5636.  Internet Draft                    DASS            9 December 1992
  5637.  
  5638.  
  5639.  
  5640.  
  5641. provided to refresh this information periodically for principals
  5642. whose sessions might be long lived, but it would probably be
  5643. acceptable in the unlikely event of a user's ancestor's keys changing
  5644. to require that the user log out and log back in.  This is
  5645. consistent with the observed behavior of existing security
  5646. mechanisms.
  5647.  
  5648. The descending treewalk, on the other hand, is expected to be
  5649. maintained as a more conventional cache, where entries are kept
  5650. in a fixed amount of memory with a "least recently used"
  5651. replacement policy and a watchdog timer that assures that stale
  5652. information is not kept indefinitely.  A call to Get_Pub_Keys
  5653. with Try_Hard set false would first check that cache for relevant
  5654. certificates and only if none were found there would it go out to
  5655. the naming service.  If there were newer certificates in the
  5656. naming service, they might not be found and an authentication
  5657. might therefore fail.
  5658.  
  5659. When Try_Hard is false, an implementation may assume that
  5660. certificates not in the cache do not exist so long as that
  5661. assumption does not cause an authentication to falsely succeed.
  5662. In that case, it may only make that assumption if the
  5663. certificates have been verified to not exist within the
  5664. revocation time (a few hours).
  5665. 3.11 DASSlessness Determination Functions
  5666.  
  5667. In order to provide better interoperability with alternative
  5668. authentication mechanisms and to provide backward compatibility
  5669. with older (insecure) authentication mechanisms, it is sometimes
  5670. important to be able to determine in a secure way what the
  5671. appropriate authentication mechanism is for a particular named
  5672. principal.  For some applications, this will be done by a local
  5673. mechanism, where either the person creating access control
  5674. information must know and specify the mechanism for each
  5675. principal or a system administrator on the node must maintain a
  5676. database mapping names to mechanisms.  Three applications come to
  5677. mind where scaleability makes such mechanisms implausible:
  5678.  
  5679.  a) To transparently secure proxy-based applications (like rlogin)
  5680.     in an environment where some hosts have been upgraded to
  5681.     support DASS and some have not, a node must be willing to
  5682.     accept connections authenticated only by their network
  5683.     addresses but only if they can be assured that such nodes do
  5684.     not have DASS installed.  Access to a resource becomes secure
  5685.     without administrative action when all nodes authorized to
  5686.     access it have been upgraded.
  5687.  
  5688.     In this scenario, the server node must be able to determine
  5689.     whether the client node is DASSless in a secure fashion.
  5690.  
  5691.  
  5692.  
  5693.  
  5694.  
  5695.  Kaufman           Document Expiration: 10 June 1993       Page 89
  5696.  
  5697.  
  5698.  
  5699.  
  5700.  Internet Draft                    DASS            9 December 1992
  5701.  
  5702.  
  5703.  
  5704.  
  5705.  b) Similarly, in a mixed environment where some servers are
  5706.     running DASS and some are not, it may be desirable for clients
  5707.     to authenticate servers if they can but it would be
  5708.     unacceptable for a client to stop being able to access a
  5709.     DASSless server once DASS is installed on the client.  In such
  5710.     a situation where server authentication is desirable but not
  5711.     essential, the client would like to determine in a secure
  5712.     fashion whether the server can accept DASS authentication.
  5713.  
  5714.  c) In a DASS/Kerberos interoperability scenario, a server may
  5715.     decide that Kerberos authentication is "good enough" for
  5716.     principals that do not have DASS credentials without
  5717.     introducing trust in on-line authorities when DASS credentials
  5718.     are available.  In parallel with case 1, we want it to be true
  5719.     that when the last principal with authority to access an
  5720.     object is upgraded to DASS, we automatically cease to trust
  5721.     PasswdEtc servers without administrative action on the part of
  5722.     the object owner.  For this purpose, the authenticator must
  5723.     learn in a secure fashion that the principal is incapable of
  5724.     DASS authentication.
  5725.  
  5726. Reliably determining DASSlessness is optional for implementations
  5727. of DASS and for applications.  No other capabilities of DASS rely
  5728. on this one.
  5729.  
  5730. The interface to the DASSlessness inquiry function is specified
  5731. as a call independent of all others.  This capability must be
  5732. exposed to the calling application so that a server that receives
  5733. a request and no token can ask whether the named principal should
  5734. be believed without a token.  It might improve performance and
  5735. usability if in real interfaces DASSlessness were returned in
  5736. addition to a bad status on the function that creates a token if
  5737. the token is targeted toward a server incapable or processing it.
  5738. An application could then decide whether to make the request
  5739. without a token (and give up server authentication) or to abort
  5740. the request.
  5741.  
  5742.  
  5743. 3.11.1 Query DASSlessness
  5744.  
  5745. Query_DASSlessness(
  5746.                                                    --inputs
  5747.                     verifying_credentials Credentials,
  5748.                     principal_name        Name,
  5749.                                                    --outputs
  5750.                     alternate_authentication Set of OIDs)
  5751.  
  5752. This function uses the verifying credentials to search for an
  5753.  
  5754.  
  5755.  
  5756.  
  5757.  
  5758.  
  5759.  Kaufman           Document Expiration: 10 June 1993       Page 90
  5760.  
  5761.  
  5762.  
  5763.  
  5764.  Internet Draft                    DASS            9 December 1992
  5765.  
  5766.  
  5767.  
  5768.  
  5769. alternative authentication mechanism certificate for the named
  5770. principal or for any CA on the path between the verifying
  5771. credentials and the named principal.  Such a certificate is
  5772. identical to an DASS X.509 certificate except that it lists a
  5773. different algorithm identifier for the public key of the subject
  5774. than that expected by DASS.
  5775.  
  5776. This function is implemented identically to Get_Pub_Keys except:
  5777.  
  5778.  a) If in any set of certificates found, no valid DASS certificate
  5779.     is found and one or more certificates are found that would
  5780.     otherwise be valid except for an invalid subject public key
  5781.     OID, the OID from that certificate or certificates is returned
  5782.     and the algorithm terminates.
  5783.  
  5784.  b) On initial execution, Try_Hard=False.  If the first execution
  5785.     fails to retrieve any valid PK/UID pairs but also fails to
  5786.     find any invalid OID certificates, repeat the execution with
  5787.     Try_Hard=True.
  5788.  
  5789.  c) If the either execution finds PK/UID pairs or if neither finds
  5790.     and invalid OID certificates, fail by returning a null set.
  5791.  
  5792.  
  5793. 4 Certificate and message formats
  5794.  
  5795. 4.1 ASN.1 encoding
  5796.  
  5797. Some definitions are taken from X.501 and X.509.
  5798.  
  5799. Dass DEFINITIONS ::=
  5800.  
  5801. BEGIN
  5802.  
  5803. --CCITT Definitions:
  5804.  
  5805. joint-iso-ccitt      OBJECT IDENTIFIER ::= {2}
  5806. ds                   OBJECT IDENTIFIER ::= {joint-iso-ccitt 5}
  5807. algorithm            OBJECT IDENTIFIER ::= {ds 8}
  5808. encryptionAlgorithm  OBJECT IDENTIFIER ::= {algorithm 1}
  5809. hashAlgorithm        OBJECT IDENTIFIER ::= {algorithm 2}
  5810. signatureAlgorithm   OBJECT IDENTIFIER ::= {algorithm 3}
  5811. rsa                  OBJECT IDENTIFIER ::= {encryptionAlgorithm 1}
  5812.  
  5813. iso                  OBJECT IDENTIFIER ::= {1}
  5814. identified-organization OBJECT IDENTIFIER ::= {iso 3}
  5815. ecma               OBJECT IDENTIFIER ::= {identified-organization 12}
  5816. member-company       OBJECT IDENTIFIER ::= {ecma 2}
  5817. digital              OBJECT IDENTIFIER ::= {member-company 1011}
  5818.  
  5819.  
  5820.  
  5821.  
  5822.  
  5823.  Kaufman           Document Expiration: 10 June 1993       Page 91
  5824.  
  5825.  
  5826.  
  5827.  
  5828.  Internet Draft                    DASS            9 December 1992
  5829.  
  5830.  
  5831.  
  5832.  
  5833. --1989 OSI Implementors Workshop "Stable" Agreements
  5834.  
  5835. oiw                OBJECT IDENTIFIER ::= {identified-organization 14}
  5836. dssig                  OBJECT IDENTIFIER ::= {oiw 7}
  5837. oiwAlgorithm           OBJECT IDENTIFIER ::= {dssig 2}
  5838. oiwEncryptionAlgorithm OBJECT IDENTIFIER ::= {oiwAlgorithm 1}
  5839. oiwHashAlgorithm       OBJECT IDENTIFIER ::= {oiwAlgorithm 2}
  5840. oiwSignatureAlgorithm  OBJECT IDENTIFIER ::= {oiwAlgorithm 3}
  5841. oiwMD2                 OBJECT IDENTIFIER ::= {oiwHashAlgorithm 1}
  5842.                                                --null parameter
  5843. oiwMD2withRSA          OBJECT IDENTIFIER ::= {oiwSignatureAlgorithm 1}
  5844.                                                --null parameter
  5845.  
  5846. --X.501 definitions
  5847.  
  5848. AttributeType ::= OBJECT IDENTIFIER
  5849. AttributeValue ::= ANY
  5850. AttributeValueAssertion ::= SEQUENCE {AttributeType,AttributeValue}
  5851.  
  5852. Name ::= CHOICE {       --only one for now
  5853.                 RDNSequence
  5854.                     }
  5855. RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
  5856. DistinguishedName ::= RDNSequence
  5857.  
  5858. RelativeDistinguishedName ::= SET OF AttributeValueAssertion
  5859.  
  5860. --X.509 definitions (with proposed 1992 extensions presumed)
  5861.  
  5862. ENCRYPTED MACRO ::=
  5863. BEGIN
  5864. TYPE NOTATION   ::= type(ToBeEnciphered)
  5865. VALUE NOTATION  ::= value(VALUE BIT STRING)
  5866. END     -- of ENCRYPTED
  5867.  
  5868. SIGNED MACRO    ::=
  5869. BEGIN
  5870. TYPE NOTATION   ::= type (ToBeSigned)
  5871. VALUE NOTATION  ::= value (VALUE
  5872. SEQUENCE{
  5873.         ToBeSigned,
  5874.         AlgorithmIdentifier,    --of the algorithm used to
  5875.                                 --generate the signature
  5876.         ENCRYPTED OCTET STRING  --where the octet string is the
  5877.                                 --result of the hashing of the
  5878.                                 --value of "ToBeSigned"
  5879.         }
  5880.                         )
  5881. END     -- of SIGNED
  5882.  
  5883.  
  5884.  
  5885.  
  5886.  
  5887.  Kaufman           Document Expiration: 10 June 1993       Page 92
  5888.  
  5889.  
  5890.  
  5891.  
  5892.  Internet Draft                    DASS            9 December 1992
  5893.  
  5894.  
  5895.  
  5896.  
  5897.  
  5898.  
  5899. SIGNATURE MACRO ::=
  5900. BEGIN
  5901. TYPE NOTATION   ::= type (OfSignature)
  5902. VALUE NOTATION  ::= value (VALUE
  5903. SEQUENCE {
  5904.         AlgorithmIdentifier,    --of the algorithm used to compute
  5905.         ENCRYPTED OCTET STRING  -- the signature where the octet
  5906.                                 -- string is a function (e.g. a
  5907.                                 -- compressed or hashed version)
  5908.                                 -- of the value 'OfSignature',
  5909.                                 -- which may include the
  5910.                                 -- identifier of the algorithm
  5911.                                 -- used to compute the signature
  5912.         }
  5913.                         )
  5914. END     -- of SIGNATURE
  5915.  
  5916.  
  5917.  
  5918. Certificate ::= SIGNED SEQUENCE {
  5919.         version [0]             Version DEFAULT v1988,
  5920.         serialNumber    CertificateSerialNumber,
  5921.         signature               AlgorithmIdentifier,
  5922.         issuer          Name,
  5923.         valid           Validity,
  5924.         subject         Name,
  5925.         subjectPublicKey        SubjectPublicKeyInfo,
  5926.         issuerUID [1]   IMPLICIT UID OPTIONAL,  -- v1992
  5927.         subjectUID [2]  IMPLICIT UID OPTIONAL   -- v1992
  5928.         }
  5929.  
  5930.         --The Algorithm Identifier for both the signature field
  5931.         --and in the signature itself is:
  5932.         --      oiwMD2withRSA (1.3.14.7.2.3.1)
  5933.  
  5934. Version ::= INTEGER {v1988(0), v1992(1)}
  5935.  
  5936. CertificateSerialNumber ::= INTEGER
  5937.  
  5938. Validity ::= SEQUENCE {
  5939.         NotBefore       UTCTime,
  5940.         NotAfter        UTCTime
  5941.         }
  5942.  
  5943.  
  5944.  
  5945.  
  5946.  
  5947.  
  5948.  
  5949.  
  5950.  
  5951.  Kaufman           Document Expiration: 10 June 1993       Page 93
  5952.  
  5953.  
  5954.  
  5955.  
  5956.  Internet Draft                    DASS            9 December 1992
  5957.  
  5958.  
  5959.  
  5960.  
  5961.  
  5962. AlgorithmIdentifier ::= SEQUENCE {
  5963.         algorithm       OBJECT IDENTIFIER,
  5964.         parameter       ANY DEFINED BY algorithm OPTIONAL
  5965.         }
  5966.  
  5967. --The algorithms we support in one context or another are:
  5968.         --oiwMD2withRSA (1.3.14.7.2.3.1) with parameter NULL
  5969.         --rsa (2.5.8.1.1) with parameter keysize INTEGER which is
  5970.         --           the keysize in bits
  5971.         --decDEA (1.3.12.1001.7.1.2) with optional parameter
  5972.         --           missing
  5973.         --decDEAMAC (1.3.12.2.1011.7.3.3) with optional parameter
  5974.         --           missing
  5975.  
  5976. SubjectPublicKeyInfo  ::=  SEQUENCE {
  5977.         algorithm       AlgorithmIdentifier,     -- rsa (2.5.8.1.1)
  5978.         subjectPublicKey        BIT STRING
  5979.                 -- the "bits" further decode into a DASS public key
  5980.         }
  5981.  
  5982. UID ::= BIT STRING
  5983.  
  5984. -- the following definitions are for Digital specified Algorithms
  5985.  
  5986. cryptoAlgorithm OBJECT IDENTIFIER ::= {digital 7}
  5987.  
  5988. decEncryptionAlgorithm  OBJECT IDENTIFIER ::= {cryptoAlgorithm 1}
  5989. decHashAlgorithm        OBJECT IDENTIFIER ::= {cryptoAlgorithm 2}
  5990. decSignatureAlgorithm   OBJECT IDENTIFIER ::= {cryptoAlgorithm 3}
  5991. decDASSLessness         OBJECT IDENTIFIER ::= {cryptoAlgorithm 6}
  5992.  
  5993. decMD2withRSA   OBJECT IDENTIFIER ::= {decSignatureAlgorithm 1}
  5994. decMD4withRSA   OBJECT IDENTIFIER ::= {decSignatureAlgorithm 2}
  5995. decDEAMAC       OBJECT IDENTIFIER ::= {decSignatureAlgorithm 3}
  5996.  
  5997. decDEA          OBJECT IDENTIFIER ::= {decEncryptionAlgorithm 2}
  5998. decMD2          OBJECT IDENTIFIER ::= {decHashAlgorithm 1}
  5999. decMD4          OBJECT IDENTIFIER ::= {decHashAlgorithm 2}
  6000.  
  6001.  
  6002. ShortPosixTime ::= INTEGER   -- number of seconds since base time
  6003.  
  6004. LongPosixTime ::= SEQUENCE {
  6005.         INTEGER,             -- number of seconds since base time
  6006.         INTEGER              -- number of nanoseconds since second
  6007.         }
  6008.  
  6009.  
  6010.  
  6011.  
  6012.  
  6013.  
  6014.  
  6015.  Kaufman           Document Expiration: 10 June 1993       Page 94
  6016.  
  6017.  
  6018.  
  6019.  
  6020.  Internet Draft                    DASS            9 December 1992
  6021.  
  6022.  
  6023.  
  6024.  
  6025.  
  6026.  
  6027. ShortPosixValidity ::=  SEQUENCE {
  6028.         notBefore       ShortPosixTime,
  6029.         notAfter        ShortPosixTime }
  6030.  
  6031. -- Note: Annex C of X.509 prescribes the following format for the
  6032. -- representation of a public key, but does not give the structure
  6033. -- a name.
  6034.  
  6035. DASSPublicKey ::=  SEQUENCE {
  6036.         modulus         INTEGER,
  6037.         exponent        INTEGER
  6038.         }
  6039.  
  6040. DASSPrivateKey ::= SEQUENCE {
  6041.         p       INTEGER ,                      -- prime p
  6042.         q [0]   IMPLICIT INTEGER OPTIONAL ,    -- prime q
  6043.         mod[1]  IMPLICIT INTEGER OPTIONAL,     -- modulus
  6044.         exp [2] IMPLICIT INTEGER OPTIONAL,     -- public exponent
  6045.         dp [3]  IMPLICIT INTEGER OPTIONAL ,    -- exponent mod p
  6046.         dq [4]  IMPLICIT INTEGER OPTIONAL ,    -- exponent mod q
  6047.         cr [5]  IMPLICIT INTEGER OPTIONAL ,    -- Chinese
  6048.                                            --remainder coefficient
  6049.         uid[6]  IMPLICIT UID OPTIONAL,
  6050.         more[7] IMPLICIT BIT STRING OPTIONAL   --Reserved for
  6051.                                                --future use
  6052.         }
  6053.  
  6054.  
  6055. LocalUserName   ::= OCTET STRING
  6056. ChannelId               ::= OCTET STRING
  6057. VersionNumber           ::= OCTET STRING (SIZE(3))
  6058.                         -- first octet is major version
  6059.                         -- second octet is minor version
  6060.                         -- third octet is ECO rev.
  6061. versionZero  VersionNumber ::= '000000'H
  6062.  
  6063. Authenticator ::= SIGNED SEQUENCE {
  6064.         type            BIT STRING,
  6065.                  -- first bit `delegation required'
  6066.                  -- second bit `Mutual Authentication Requested'
  6067.         whenSigned      LongPosixTime ,
  6068.         channelId  [3]  IMPLICIT ChannelId OPTIONAL
  6069.                 -- channel bindings are included when doing the
  6070.                 -- signature, but excluded when transmitting the
  6071.                 -- Authenticator
  6072.         }
  6073.                 -- uses decDEAMAC (1.3.12.2.1011.7.3.3)
  6074.  
  6075.  
  6076.  
  6077.  
  6078.  
  6079.  Kaufman           Document Expiration: 10 June 1993       Page 95
  6080.  
  6081.  
  6082.  
  6083.  
  6084.  Internet Draft                    DASS            9 December 1992
  6085.  
  6086.  
  6087.  
  6088.  
  6089.  
  6090.  
  6091.  
  6092.  
  6093. EncryptedKey ::= SEQUENCE {
  6094.         algorithm               AlgorithmIdentifier,
  6095.                         -- uses rsa (2.5.8.1.1)
  6096.         encryptedAuthKey        BIT STRING
  6097.                         -- as defined in section 4.4.5
  6098.         }
  6099.  
  6100. SignatureOnEncryptedKey ::=  SIGNATURE EncryptedKey
  6101.              -- uses oiwMD2withRSA (1.3.14.7.2.3.1)
  6102.              -- Signature bits computed over EncryptedKey structure
  6103.  
  6104.  
  6105. LoginTicket ::= SIGNED SEQUENCE {
  6106.         version [0]         IMPLICIT VersionNumber DEFAULT versionZero,
  6107.         validity            ShortPosixValidity ,
  6108.         subjectUID          UID ,
  6109.         delegatingPublicKey SubjectPublicKeyInfo
  6110.         }
  6111.         -- uses oiwMD2withRSA (1.3.14.7.2.3.1)
  6112.  
  6113. Delegator ::= SEQUENCE {
  6114.         algorithm               AlgorithmIdentifier
  6115.                         -- decDEA encryption (1.3.12.1001.7.1.2)
  6116.         encryptedPrivKey        ENCRYPTED  DASSPrivateKey,
  6117.                         -- (only p is included)
  6118.         }
  6119.  
  6120. UserClaimant ::=  SEQUENCE {
  6121.         userTicket [0]  IMPLICIT LoginTicket,
  6122.         evidence  CHOICE {
  6123.                 delegator [1]   IMPLICIT Delegator ,
  6124.                              -- encrypted delegation private key
  6125.                              -- under DES authenticating key
  6126.                              -- present if delegating
  6127.                 sharedKeyTicketSignature [2]
  6128.                         IMPLICIT SignatureOnEncryptedKey
  6129.                              -- present if not delegating
  6130.                 } ,
  6131.         userName [3]    IMPLICIT Name OPTIONAL
  6132.                              -- name of user principal
  6133.         }
  6134.  
  6135.  
  6136.  
  6137.  
  6138.  
  6139.  
  6140.  
  6141.  
  6142.  
  6143.  Kaufman           Document Expiration: 10 June 1993       Page 96
  6144.  
  6145.  
  6146.  
  6147.  
  6148.  Internet Draft                    DASS            9 December 1992
  6149.  
  6150.  
  6151.  
  6152.  
  6153. EncryptedKeyandUserName ::= SEQUENCE {
  6154.         encryptedKey    EncryptedKey ,
  6155.         username                LocalUserName
  6156.         }
  6157.  
  6158. SignatureOnEncryptedKeyandUserName ::=
  6159.         SIGNATURE EncryptedKeyandUserName
  6160.                 -- uses oiwMD2withRSA (1.3.14.7.2.3.1)
  6161.                 -- Signature bits computed over
  6162.                 -- EncryptedKeyandUserName structure
  6163.                 -- using node private key
  6164.         }
  6165.  
  6166. NodeClaimant ::= SEQUENCE {
  6167.         nodeTicket Signature[0] IMPLICIT
  6168.                 SignatureOnEncryptedKeyandUserName,
  6169.         nodeName  [1]   IMPLICIT Name OPTIONAL,
  6170.         username  [2]   IMPLICIT LocalUserName OPTIONAL
  6171.         }
  6172.  
  6173. AuthenticationToken ::= SEQUENCE {
  6174.         version [0]    IMPLICIT VersionNumber DEFAULT versionZero,
  6175.         authenticator [1]       IMPLICIT Authenticator ,
  6176.         encryptedKey  [2]       IMPLICIT EncryptedKey OPTIONAL ,
  6177.                  -- required if initiating token
  6178.         userclaimant  [3]       IMPLICIT UserClaimant OPTIONAL ,
  6179.                  -- missing if only doing node authentication
  6180.                  -- required if not doing node authentication
  6181.         nodeclaimant [4]        IMPLICIT NodeClaimant OPTIONAL
  6182.                  -- missing if only doing principal authentication
  6183.                  -- required if not doing principal authentication
  6184.         }
  6185.  
  6186. MutualAuthenticationToken ::= CHOICE {
  6187.         v1Response [0] IMPLICIT  OCTET STRING (SIZE(6))
  6188.               -- Constructed as follows:  A single DES block
  6189.               -- of eight octets is constructed from the two
  6190.               -- integers in the timestamp.  First four bytes
  6191.               -- are the high order integer encoded MSB
  6192.               -- first; Last four bytes are the low order
  6193.               -- integer encoded MSB first.  The block is
  6194.               -- encrypted using the shared DES key, and
  6195.               -- the first six bytes are the OCTET STRING.
  6196.               -- With the [0] type and 6-byte length, the
  6197.               -- MutualAuthenticationToken has a fixed
  6198.               -- length of eight bytes.
  6199.         }
  6200. END
  6201.  
  6202.  
  6203.  
  6204.  
  6205.  
  6206.  
  6207.  Kaufman           Document Expiration: 10 June 1993       Page 97
  6208.  
  6209.  
  6210.  
  6211.  
  6212.  Internet Draft                    DASS            9 December 1992
  6213.  
  6214.  
  6215.  
  6216.  
  6217.  
  6218.  
  6219.  
  6220.  
  6221. 4.2 Encoding Rules
  6222.  
  6223. Whenever a structure is to be signed it must always be
  6224. constructed the same way. This is particularly important where a
  6225. signed structure has to be reconstructed by the recipient before
  6226. the signature is verified. The rules listed below are taken from
  6227. X.509.
  6228.  
  6229.  - the definite form of length encoding shall be used, encoded in
  6230.    the minimum number of octets;
  6231.  
  6232.  - for string types, the constructed form of encoding shall not
  6233.    be used;
  6234.  
  6235.  - if the value of a type is its default value, it shall be
  6236.    absent;
  6237.  
  6238.  - the components of a Set type shall be encoded in ascending
  6239.    order of their tag value;
  6240.  
  6241.  - the components of a Set-of type shall be encoded in ascending
  6242.    order of their octet value;
  6243.  
  6244.  - if the value of a Boolean type is true, the encoding shall
  6245.    have its contents octet set to `FF'16;
  6246.  
  6247.  - each unused bits in the final octet of the encoding of a
  6248.    BitString value, if there are any, shall be set to zero;
  6249.  
  6250.  - the encoding of a Real type shall be such that bases 8, 10 and
  6251.    16 shall not  be used, and the binary scaling factor shall be
  6252.    zero.
  6253.  
  6254.  
  6255. 4.3 Version numbers and forward compatibility
  6256.  
  6257. The LoginTicket and AuthenticationToken structures contain a
  6258. three octet version identifier which is intended to ease
  6259. transition to future revisions of this architecture.  The default
  6260. value, and the value which should always be supplied by
  6261. implementations of this version of the architecture is 0.0.0
  6262. (three zero octets).  The first octet is the major version.  An
  6263.  
  6264.  
  6265.  
  6266.  
  6267.  
  6268.  
  6269.  
  6270.  
  6271.  Kaufman           Document Expiration: 10 June 1993       Page 98
  6272.  
  6273.  
  6274.  
  6275.  
  6276.  Internet Draft                    DASS            9 December 1992
  6277.  
  6278.  
  6279.  
  6280.  
  6281.  
  6282.  
  6283. implementation of this version of the architecture should refuse
  6284. to process data structures where it is other than zero, because
  6285. changing it indicates that the interpretation of some subsidiary
  6286. data structure has changed.  The second octet is the minor
  6287. version.  An implementation of this version of the architecture
  6288. should ignore the value of this octet.  Some future version of
  6289. the architecture may set a value other than zero and may specify
  6290. some different processing of the remainder of the structure based
  6291. on that different value.  Such a change would be backward compatible
  6292. and interoperable.  The third octet is the ECO revision.  No
  6293. implementation should make any processing decisions based on the
  6294. value of that octet.  It may be logged, however, to help in
  6295. debugging interoperability problems.
  6296.  
  6297. In the CDC protocol, there is also a three octet version
  6298. numbering scheme, where versions 1.0.0 and 2.0.0 have been
  6299. defined.  Implementations should follow the same rules above and
  6300. reject major version numbers greater than 2.
  6301.  
  6302. ASN.1 is inherently extensible because it allows new fields to be
  6303. added "onto the end" of existing data structures in an
  6304. unambiguous way.  Implementations of DASS are encouraged to
  6305. ignore any such additional fields in order to enhance backwards
  6306. compatibility with future versions of the architecture.
  6307. Unfortunately, commonly available ASN.1 compilers lack this
  6308. capability, so this behavior cannot reasonably be required and
  6309. may limit options for future extensions.
  6310.  
  6311.  
  6312. 4.4 Cryptographic Encoding
  6313.  
  6314. Some of the substructures listed in the previous sections are
  6315. specified as ENCRYPTED OCTET STRINGs containing encrypted
  6316. information.  DASS uses the DES, RSA, and MD2 cryptosystems  Each
  6317. of those cryptosystems specifies a function from octet string
  6318. into another in the presence of a key (except MD2, which is
  6319. keyless).  This section describes how to form the octet strings
  6320. on which the DES and RSA operations are performed.
  6321.  
  6322. 4.4.1 Algorithm Independence vs. Key Parity
  6323.  
  6324. All of the defined encodings for DASS for secret key encryption
  6325. are based on DES.  It is intended, however, that other
  6326. cryptosystems could be substituted without any other changes for
  6327.  
  6328.  
  6329.  
  6330.  
  6331.  
  6332.  
  6333.  
  6334.  
  6335.  Kaufman           Document Expiration: 10 June 1993       Page 99
  6336.  
  6337.  
  6338.  
  6339.  
  6340.  Internet Draft                    DASS            9 December 1992
  6341.  
  6342.  
  6343.  
  6344.  
  6345. formats or algorithms.  The required "form factor" for such a
  6346. cryptosystem is that it have a 64 bit key and operate on 64 bit
  6347. blocks (this appears to be a common form factor for a
  6348. cryptosystem).  For this reason, DES keys are in all places
  6349. treated as though they were 64 bits long rather than 56.  Only in
  6350. the operation of the algorithm itself are eight bits of the key
  6351. dropped and key parity bits substituted. Choosing a key always
  6352. involves picking a 64 bit random number.
  6353.  
  6354. 4.4.2 Password Hashing
  6355.  
  6356. Encrypted credentials are encrypted using DES as described in the
  6357. next section.  The key for that encryption is derived from the
  6358. user's password and name by the following algorithm:
  6359.  
  6360.  a) Put the rightmost RDN of the user's name in canonical form
  6361.     according to BER and the X.509 encoding rules.  For any string
  6362.     types that are case insensitive, map to upper case, and where
  6363.     matching is independent of number of spaces collapse all
  6364.     multiple spaces to a single space and delete leading and
  6365.     trailing spaces.
  6366.  
  6367.     Note:  the RDN is used to add "salt" to the hash calculation
  6368.     so that someone can't precompute the hash of all the words in
  6369.     a dictionary and then apply them against all names.  Deriving
  6370.     the salt from the last RDN of the name is a compromise.  If it
  6371.     were derived from the whole name, all encrypted keys would be
  6372.     obsoleted when a branch of the namespace was renamed.  If it
  6373.     were independent of name, interaction with a login agent would
  6374.     take two extra messages to retrieve the salt.  With this
  6375.     scheme, encrypted keys are obsoleted by a change in the last
  6376.     RDN and if a final RDN is common to a large number of users,
  6377.     dictionary attacks against them are easier; but the common
  6378.     case works as desired.
  6379.  
  6380.  b) Compute TEMP as the MD2 message digest of the concatenation of
  6381.     the password and the RDN computed above.
  6382.  
  6383.  c) Repeat the following 40 times:  Use the first 64 bits of TEMP
  6384.     as a DES key to encrypt the second 64 bits;  XOR the result
  6385.     with the first 64 bits of TEMP; and compute a new TEMP as MD2
  6386.     of the 128 bit result.
  6387.  
  6388.  d) Use the final 64 bits of the result (called hash1) as the key
  6389.     to decrypt the encrypted credentials.  Use the first 64 bits
  6390.     (called hash2) as the proof of knowledge of the password for
  6391.     presentation to a login agent (if any).
  6392.  
  6393.  
  6394.  
  6395.  
  6396.  
  6397.  
  6398.  
  6399.  Kaufman           Document Expiration: 10 June 1993      Page 100
  6400.  
  6401.  
  6402.  
  6403.  
  6404.  Internet Draft                    DASS            9 December 1992
  6405.  
  6406.  
  6407.  
  6408. 4.4.3 Digital DEA encryption
  6409.  
  6410. DES encryption is used in the following places:
  6411.  
  6412.  - In the encryption of the encrypted credentials structure
  6413.  
  6414.  - To encrypt the delegator in authentication tokens
  6415.  
  6416.  - To encrypt the time in the mutual authenticator
  6417.  
  6418. In the first two cases, a varying length block of information
  6419. coded in ASN.1 is encrypted.  This is done by dividing the block
  6420. of information into 8 octet blocks, padding the last block with
  6421. zero bytes if necessary, and encrypting the result using the CBC
  6422. mode of DES.  A zero IV is used.
  6423.  
  6424. In the third case, a fixed length (8 byte) quantity (a timestamp)
  6425. is encrypted.  The timestamp is mapped to a byte string using
  6426. "big endian" order and the block is encrypted using the ECB mode
  6427. of DES.
  6428.  
  6429. 4.4.4  Digital MAC Signing
  6430.  
  6431. DES signing is used in the Authenticator.  Here, the signature is
  6432. computed over an ASN.1 structure.  The signature is the CBC
  6433. residue of the structure padded to a multiple of eight bytes with
  6434. zeros.  The CBC is computed with an IV of zero.
  6435.  
  6436. 4.4.5 RSA Encryption
  6437.  
  6438. RSA encryption is used in the Encrypted Shared Key.  RSA
  6439. encryption is best thought of as operating on blocks which are
  6440. integers rather than octet strings and the results are also
  6441. integers.  Because an RSA encryption permutes the integers
  6442. between zero and (modulus-1), it is generally thought of as
  6443. acting on a block of size (keysizeinbits-1) and producing a block
  6444. of size (keysizeinbits) where keysizeinbits is the smallest
  6445. number of bits in which the modulus can be represented.
  6446.  
  6447. DASS only supports key sizes which are a multiple of eight bits (1).
  6448.  
  6449.  
  6450.   (1) This restriction is only required to support interoperation
  6451.       with certain existing implementations.  If the key size is not
  6452.       a multiple of eight bits,  the high order byte may not be able
  6453.       to hold values as large as the mandated '64'.  This is not a
  6454.       problem so long as the two high order bytes together are
  6455.       non-zero, but certain early implementations check for the value
  6456.       '64' and will not interoperate with implementations that use
  6457.       some other value.
  6458.  
  6459.  
  6460.  
  6461.  
  6462.  
  6463.  Kaufman           Document Expiration: 10 June 1993      Page 101
  6464.  
  6465.  
  6466.  
  6467.  
  6468.  Internet Draft                    DASS            9 December 1992
  6469.  
  6470.  
  6471.  
  6472. The encrypted shared key structure is laid out as follows:
  6473.  
  6474.  - The DES key to be shared is placed in the last eight bytes
  6475.  
  6476.  - The POSIX format creation time encoded in four bytes using big
  6477.    endian byte order is placed in the next four (from the end)
  6478.    bytes
  6479.  
  6480.  - The POSIX format expiration time encoded in four bytes using
  6481.    big endian byte order is placed in the next four (from the
  6482.    end) bytes
  6483.  
  6484.  - Four zero bytes are placed in the next four (from the end)
  6485.    bytes
  6486.  
  6487.  - The first byte contains the constant '64' (decimal)
  6488.  
  6489.  - All remaining bytes are filled with random bytes (the security
  6490.    of the system does not depend on the cryptographic randomness
  6491.    of these bytes, but they should not be a frequently repeating
  6492.    or predictable value.  Repeating the DES key from the last
  6493.    bytes would be good).
  6494.  
  6495. The RSA algorithm is applied to the integer formed by treating
  6496. the bytes above as an integer in big endian order and the
  6497. resulting integer is converted to a BIT STRING by laying out the
  6498. integer in 'big endian' order.
  6499.  
  6500. On decryption, the process is reversed; the decryptor should
  6501. verify the four explicitly zero bytes but should not verify the
  6502. contents of the high order byte or the random bytes.
  6503.  
  6504. 4.4.6 oiwMD2withRSA Signatures
  6505.  
  6506. RSA-MD2 signatures are used on certificates, login tickets,
  6507. shared key tickets, and node tickets.  In all cases, a signature
  6508. is computed on an ASN.1 encoded string using an RSA private key.
  6509. This is done as follows:
  6510.  
  6511.  - The MD2 algorithm is applied to the ASN.1 encoded string to
  6512.    produce a 128 bit message digest
  6513.  
  6514.  - The message digest is placed in the low order bytes of the RSA
  6515.    block (big endian)
  6516.  
  6517.  - The next two lowest order bytes are the ASN.1 'T' and 'L' for
  6518.    an OCTET STRING.
  6519.  
  6520.  - The remainder of the RSA block is filled with zeros
  6521.  
  6522.  
  6523.  
  6524.  
  6525.  
  6526.  
  6527.  Kaufman           Document Expiration: 10 June 1993      Page 102
  6528.  
  6529.  
  6530.  
  6531.  
  6532.  Internet Draft                    DASS            9 December 1992
  6533.  
  6534.  
  6535.  
  6536.  
  6537.  
  6538.  
  6539.  - The RSA operation is performed, and the resulting integer is
  6540.    converted to an octet string by laying out the bytes in big
  6541.    endian order.
  6542.  
  6543. On verification, a value like the above  or one where the message
  6544. digest is present but the 'T' and 'L' are missing (zero) should
  6545. be accepted for backwards compatibility with an earlier
  6546. definition of this crypto algorithm.
  6547.  
  6548. 4.4.7 decMD2withRSA Signatures
  6549.  
  6550. This algorithm is the same as the oiwMD2withRSA algorithm as
  6551. defined above.  We allocated an algorithm object identifier from
  6552. the Digital space in case the definition of that OID should
  6553. change.  It will not be used unless the meaning of oiwMD2withRSA
  6554. becomes unstable.
  6555.  
  6556.  
  6557.  
  6558.  
  6559.  
  6560.  
  6561.  
  6562.  
  6563.  
  6564.  
  6565.  
  6566.  
  6567.  
  6568.  
  6569.  
  6570.  
  6571.  
  6572.  
  6573.  
  6574.  
  6575.  
  6576.  
  6577.  
  6578.  
  6579.  
  6580.  
  6581.  
  6582.  
  6583.  
  6584.  
  6585.  
  6586.  
  6587.  
  6588.  
  6589.  
  6590.  
  6591.  Kaufman           Document Expiration: 10 June 1993      Page 103
  6592.  
  6593.  
  6594.  
  6595.  
  6596.  Internet Draft                    DASS            9 December 1992
  6597.  
  6598.  
  6599.  
  6600.                              Annex A
  6601.                           Typical Usage
  6602.  
  6603. This annex describes one way a system could use DASS services (as
  6604. described in section 3) to provide security services.  While this
  6605. example provided motivation for some of the properties of DASS,
  6606. it is not intended to represent the only way that DASS may be
  6607. used.  This goes through the steps that would be needed to
  6608. install DASS "from scratch".
  6609.  
  6610. A.1 Creating a CA
  6611.  
  6612. A CA is created by initializing its state. Each CA can sign
  6613. certificates that will be placed in some directory in the name
  6614. service. Before these certificates will be believed in a wider
  6615. context than the sub-tree of the name space which is headed by
  6616. that directory, the CA must be certified by a CA for the parent
  6617. directory. The procedure below accomplishes this. For most secure
  6618. operation, the CA should run on an off-line system and
  6619. communicate with the rest of the network by interchanging files
  6620. using a simple specialized mechanism such as an RS232 line or a
  6621. floppy disk. It is assumed that access to the CA is controlled
  6622. and that the CA will accept instructions from an operator.
  6623.  
  6624.  - Call Install_CA to create the CA State.
  6625.    This state is saved within the CA system and is never
  6626.    disclosed.
  6627.  
  6628.  - If this is the first CA in the namespace and the CA is
  6629.    intended to certify only members of a single directory, we are
  6630.    done.  Otherwise, the new CA must be linked into the CA
  6631.    hierarchy by cross-certifying the parent and children of this
  6632.    CA.  There is no requirement that CA hierarchies be created
  6633.    from the root down, but to simplify exposition, only this case
  6634.    will be described.  The newly created CA must learn its name,
  6635.    its UID, the UID of its parent directory, and the public key
  6636.    of the parent directory CA by some out of band reliable means.
  6637.    Most likely, this would be done by looking up the information
  6638.    in the naming service and asking the CA operator to verify it.
  6639.    The CA then forms this information into a   parent certificate
  6640.    and signs it using the Create_certificate function.  It
  6641.    communicates the certificate to the network and posts it in
  6642.    the naming service.
  6643.  
  6644.  - This name, UID, and public key of the new CA are taken to the
  6645.    CA of the parent directory, which verifies it (again by some
  6646.    unspecified out-of-band mechanism) and calls
  6647.    Create_Certificate to create a child  certificate using its own
  6648.    Name and UID in the issuer fields. This certificate is also
  6649.    placed in the naming service.
  6650.  
  6651.  
  6652.  
  6653.  
  6654.  
  6655.  Kaufman           Document Expiration: 10 June 1993      Page 104
  6656.  
  6657.  
  6658.  
  6659.  
  6660.  Internet Draft                    DASS            9 December 1992
  6661.  
  6662.  
  6663.  
  6664.  
  6665. A CA can sign certificates for more than one directory. In this
  6666. case it is possible that a single CA will take the role of both
  6667. CAs in the example above. The above procedure can be simplified
  6668. in this case, as no interchange of information is required.
  6669.  
  6670. A.2 Creating a User Principal
  6671.  
  6672. A system manager may create a new user principal by invoking the
  6673. Create_principal function supplying the principal's name, UID,
  6674. and the public key/UID of the parent CA.  The public key and UID
  6675. must be obtained in a reliable out of band manner.  This is
  6676. probably by having knowledge of that information "wired into" the
  6677. utility which creates new principals.  At account creation time,
  6678. the system manager must supply what will become the user's
  6679. password.  This might be done by having the user present and
  6680. directly enter a password or by having the password selected by
  6681. some random generator.
  6682.  
  6683. The trusted authority certificate and corresponding user public
  6684. key generated by the Create_principal function are sent to the CA
  6685. which verifies its contents (again by an out-of-band mechanism)
  6686. and signs a corresponding certificate.  The encrypted
  6687. credentials, CA signed certificate, and trusted authority
  6688. certificates are all placed in the naming service.
  6689. The process by which the password is made known to the user must
  6690. be protected by some out-of-band mechanism.
  6691.  
  6692. In some cases the principal may wish to generate its own key, and
  6693. not use the Encrypted_Credentials. (e.g. if the Principal is
  6694. represented by a Smart Card). This may be done using a procedure
  6695. similar to the one for creating a new CA.
  6696.  
  6697. A.3 Creating a Server Principal
  6698.  
  6699. A server also has a public/private key pair. Conceptually, the
  6700. same procedure used to create a user principal can be used to
  6701. create a server.  In practice, the most important difference  is
  6702. likely to be how the password is protected when installing it on
  6703. a server compared to giving it to a user.
  6704.  
  6705. A server may wish to retrieve (and store) its Encrypted
  6706. Credentials directly and never have them placed in the naming
  6707. service. In this case some other mechanism can be used (e.g.
  6708. passing the floppy disk containing the encrypted credentials to
  6709. the server). This would require a variant of the
  6710. Initialize_Server routine which does not fetch the Encrypted
  6711. Credentials from the naming service.
  6712.  
  6713.  
  6714.  
  6715.  
  6716.  
  6717.  
  6718.  
  6719.  Kaufman           Document Expiration: 10 June 1993      Page 105
  6720.  
  6721.  
  6722.  
  6723.  
  6724.  Internet Draft                    DASS            9 December 1992
  6725.  
  6726.  
  6727.  
  6728. A.4 Booting a Server Principal
  6729.  
  6730. When the server first boots it needs its name (unreliably) and
  6731. password (reliably). It then calls Initialize_Server to obtain
  6732. its credentials and trusted authority certificates (which it will
  6733. later need in order to authenticate users).  These credentials
  6734. never time out, and are expected to be saved for a long time.  In
  6735. particular the associated Incoming Timestamp List must be
  6736. preserved while there are any timestamps on it. It is desirable
  6737. to preserve the Cached Incoming Contexts as long as there are any
  6738. contexts likely to be reused.
  6739.  
  6740. If a server wants to initiate associations on its own behalf then
  6741. it must call Generate_Server_Ticket.  It must repeat this at
  6742. intervals if the expiration period expires.
  6743.  
  6744. A node that wishes to do node authentication (or which acts as a
  6745. server under its own name) must be created as a server.
  6746.  
  6747. A.5 A user logs on to the network
  6748.  
  6749. The system that the user logs onto finds the user's name and
  6750. password. It then calls Network_Login to obtain credentials for
  6751. the user. These credentials are saved until the user wants to
  6752. make a network connection. The credentials have a time limit, so
  6753. the user will have to obtain new credentials in order to make
  6754. connections after the time limit. The credentials are then
  6755. checked by calling Verify_Principal_Name, in order to check that
  6756. the key specified in the encrypted credentials has been certified
  6757. by the CA.
  6758.  
  6759. If the system does source node authentication it will call
  6760. Combine_credentials, once the local username has been found.
  6761. (This can either be found by looking the principal's global name
  6762. up in a file, or the user can be asked to give the local name
  6763. directly. Alternatively the user can be asked to give his local
  6764. username, which the system looks up to find the global name).
  6765.  
  6766. A.6 An Rlogin (TCP/IP) connection is made
  6767.  
  6768. When the user calls a modified version of the rlogin utility, it
  6769. calls Create_token in order to create the Initial Authentication
  6770. Token, which is passed to the other system as part of the rlogin
  6771. protocol.  The rlogind utility at the destination node calls
  6772. Accept_token to verify it.  It then looks up in a local
  6773. rhosts-like database to determine whether this global user is
  6774. allowed access to the requested destination account.  It calls
  6775. Verify_principal_name and/or Verify_node_name to confirm the
  6776. identity of the requester.  If access is allowed, the connection
  6777. is accepted and the Mutual Authentication Token is returned in
  6778. the response message.
  6779.  
  6780.  
  6781.  
  6782.  
  6783.  Kaufman           Document Expiration: 10 June 1993      Page 106
  6784.  
  6785.  
  6786.  
  6787.  
  6788.  Internet Draft                    DASS            9 December 1992
  6789.  
  6790.  
  6791.  
  6792.  
  6793. The source receives the returned Mutual Authentication Token and
  6794. uses it to confirm it communicating with the correct destination
  6795. node.
  6796.  
  6797. Rlogind then calls Combine_credentials to combine its
  6798. node/account information with the global user identification in
  6799. the received credentials in case the user accesses any network
  6800. resources from the destination system.
  6801.  
  6802. A.7 A Transport-Independent Connection
  6803.  
  6804. As an alternative to the description in A.6, an application
  6805. wishing to be portable between different underlying transports
  6806. may call create_token to create an authentication token which it
  6807. then sends to its peer.  The peer can then call accept_token and
  6808. verify_principal_name and learn the identity of the requester.
  6809.  
  6810.  
  6811.  
  6812.  
  6813.  
  6814.  
  6815.  
  6816.  
  6817.  
  6818.  
  6819.  
  6820.  
  6821.  
  6822.  
  6823.  
  6824.  
  6825.  
  6826.  
  6827.  
  6828.  
  6829.  
  6830.  
  6831.  
  6832.  
  6833.  
  6834.  
  6835.  
  6836.  
  6837.  
  6838.  
  6839.  
  6840.  
  6841.  
  6842.  
  6843.  
  6844.  
  6845.  
  6846.  
  6847.  Kaufman           Document Expiration: 10 June 1993      Page 107
  6848.  
  6849.  
  6850.  
  6851.  
  6852.  Internet Draft                    DASS            9 December 1992
  6853.  
  6854.  
  6855.  
  6856.  
  6857.                              Annex B
  6858.                       Support of the GSSAPI
  6859.  
  6860. In order to support applications which need to be portable across
  6861. a variety of underlying security mechanisms, a "Generic Security
  6862. Service API" (or GSSAPI) was designed which gives access to a
  6863. common core of security services expected to be provided by
  6864. several mechanisms.  The GSSAPI was designed with DASS, Kerberos
  6865. V4, and Kerberos V5 in mind, and could be written as a front end
  6866. to any or all of those systems.  It is hoped that it could serve
  6867. as an interface to other security systems as well.
  6868.  
  6869. Application portability requires that the security services
  6870. supported be comparable.  Applications using the GSSAPI will not
  6871. be able to access all of the features of the underlying security
  6872. mechanisms.  For example, the GSSAPI does not allow access to the
  6873. "node authentication" features of DASS.  To the extent the
  6874. underlying security mechanisms do not support all the features of
  6875. GSSAPI, applications using those features will not be portable to
  6876. those security mechanisms.  For example, Kerberos V4 does not
  6877. support delegation, so applications using that feature of the GSSAPI
  6878. will not be portable to Kerberos V4.
  6879.  
  6880. This annex explains how the GSSAPI can be implemented using the
  6881. primitive services provided by DASS.
  6882.  
  6883. B.1 Summary of GSSAPI
  6884.  
  6885. The latest draft of the GSSAPI specification is available as an
  6886. internet draft.  The following is a brief summary of that
  6887. evolving document and should not be taken as definitive.
  6888. Included here are only those aspects of GSSAPI whose
  6889. implementation would be DASS specific.
  6890.  
  6891. The GSSAPI provides four classes of functions: Credential
  6892. Management, Context-Level Calls, Per-message calls, and Support
  6893. Calls; two types of objects: Credentials and Contexts; and two
  6894. kinds of data structures to be transmitted as opaque byte
  6895. strings: Tokens and Messages. Credentials hold keys and support
  6896. information used in creating tokens.  Contexts hold keys and
  6897. support information used in signing and encrypting messages.
  6898.  
  6899. The Credential Management functions of GSSAPI are "incomplete" in
  6900. the sense that one could not build a useful security
  6901. implementation using only GSSAPI.  Functions which create
  6902. credentials based on passwords or smart cards are needed but not
  6903. provided by GSSAPI.  It is envisioned that such functions would
  6904. be invoked by security mechanism specific functions at user login
  6905. or via some separate utility rather than from within applications
  6906. intended to be portable.  The Credential Management functions
  6907. available to portable applications are:
  6908.  
  6909.  
  6910.  
  6911.  Kaufman           Document Expiration: 10 June 1993      Page 108
  6912.  
  6913.  
  6914.  
  6915.  
  6916.  Internet Draft                    DASS            9 December 1992
  6917.  
  6918.  
  6919.  
  6920.  
  6921.  - GSS_Acquire_cred:  get a handle to an existing credential
  6922.    structure based on a name or process default.
  6923.  
  6924.  - GSS_Release_cred:  release credentials after use.
  6925.  
  6926. The Context-Level Calls use credentials to establish contexts.
  6927. Contexts are like connections: they are created in pairs and are
  6928. generally used at the two ends of a connection to process
  6929. messages associated with that connection.  The Context-Level
  6930. Calls of interest are:
  6931.  
  6932.  - GSS_Init_sec_context:  given credentials and the name of a
  6933.    destination, create a new context and a token which will
  6934.    permit the destination to create a corresponding context.
  6935.  
  6936.  - GSS_Accept_sec_context:  given credentials and an incoming
  6937.    token, create a context corresponding to the one at the
  6938.    initiating end and provide information identifying the
  6939.    initiator.
  6940.  
  6941.  - GSS_Delete_sec_context:  delete a context after use.
  6942.  
  6943. The Per-Message Calls use contexts to sign, verify, encrypt, and
  6944. decrypt messages between the holders of matching contexts.  The
  6945. Per-Message Calls are:
  6946.  
  6947.  - GSS_Sign:  Given a context and a message, produces a string of
  6948.    bytes which constitute a signature on a provided message.
  6949.  
  6950.  - GSS_Verify:  Given a context, a message, and the bytes
  6951.    returned by GSS_Sign, verifies the message to be authentic
  6952.    (unaltered since it was signed by the corresponding context).
  6953.  
  6954.  - GSS_Seal:  Given a context and a message, produces a string of
  6955.    bytes which include the message and a signature; the message
  6956.    may optionally be encrypted.
  6957.  
  6958.  - GSS_Unseal:  Given a context and the string of bytes from
  6959.    GSS_Seal, returns the original message and a status indicating
  6960.    its authenticity.
  6961.  
  6962. The Support Calls provide utilities like translating names and
  6963. status codes into printable strings.
  6964.  
  6965. B.2 Implementation of GSSAPI over DASS
  6966.  
  6967. B.2.1 Data Structures
  6968.  
  6969. The objects and data structures of the GSSAPI do not map neatly
  6970. into the objects and data structures of the DASS architecture.
  6971.  
  6972.  
  6973.  
  6974.  
  6975.  Kaufman           Document Expiration: 10 June 1993      Page 109
  6976.  
  6977.  
  6978.  
  6979.  
  6980.  Internet Draft                    DASS            9 December 1992
  6981.  
  6982.  
  6983.  
  6984.  
  6985. This section describes how those data structures can be
  6986. implemented using the DASS data structures and primitives
  6987.  
  6988. Credential handles correspond to the credentials structures in
  6989. DASS, where the portable API assumes that the credential
  6990. structures themselves are kept from applications and handles are
  6991. passed to and from the various subroutines.
  6992.  
  6993. Context initialization tokens correspond to the tokens of DASS.
  6994. The GSSAPI prescribes a particular ASN.1 encoded form for tokens
  6995. which includes a mechanism specific bit string within it.  An
  6996. implementation of GSSAPI should enclose the DASS token within the
  6997. GSSAPI "wrapper".
  6998.  
  6999. Context handles have no corresponding structure in DASS. The
  7000. Create_token and Accept_token calls of DASS return a shared key
  7001. and instance identifier. An implementation of the GSSAPI must
  7002. take those values along with some other status information and
  7003. package it as a "context" opaque structure.  These data
  7004. structures must be allocated and freed with the appropriate
  7005. calls.
  7006.  
  7007. Per-message tokens and sealed messages have no corresponding data
  7008. structure within DASS.  To fully support the GSSAPI
  7009. functionality, DASS must be extended to include this
  7010. functionality.  These data structures are created by
  7011. cryptographic routines given the keys and status information in
  7012. context structures and the messages passed to them.  While not
  7013. properly part of the DASS architecture, the formats of these data
  7014. structures are included in section C.3.
  7015.  
  7016. B.2.2 Procedures
  7017.  
  7018. This section explains how the functions of the GSSAPI can be
  7019. provided in terms of the Services Provided by DASS.  Not all of
  7020. the DASS features are accessible through the GSSAPI.
  7021.  
  7022. B.2.2.1 GSS_Acquire_cred
  7023.  
  7024. The GSSAPI does not provide a mechanism for logging in users or
  7025. establishing server credentials. It assumes that some system
  7026. specific mechanism created those credentials and that
  7027. applications need some mechanism for getting at them. A model
  7028. implementation might save all credentials in a node-global pool
  7029. indexed by some sort of credential name. The credentials in the
  7030. pool would be access controlled by some local policy which is not
  7031. concern of portable applications. Those applications would simply
  7032. call GSS_Acquire_cred and if they passed the access control
  7033. check, they would get a handle to the credentials which could be
  7034. used in subsequent calls.
  7035.  
  7036.  
  7037.  
  7038.  
  7039.  Kaufman           Document Expiration: 10 June 1993      Page 110
  7040.  
  7041.  
  7042.  
  7043.  
  7044.  Internet Draft                    DASS            9 December 1992
  7045.  
  7046.  
  7047.  
  7048.  
  7049.  
  7050. B.2.2.2 GSS_Release_cred
  7051.  
  7052. This call corresponds to the "delete_credentials" call of DASS.
  7053.  
  7054. B.2.2.3 GSS_Init_sec_context
  7055.  
  7056. In the course of a normal mutual authentication, this routine
  7057. will be called twice. The procedure can determine whether this is
  7058. the first or second call by seeing whether the
  7059. "input_context_handle" is zero (it will be on the first call).
  7060. On the first call, it will use the DASS Create_token service to
  7061. create a token and it will also allocate and populate a "context"
  7062. structure. That structure will hold the key, instance identifier,
  7063. and mutual authentication token returned by Create_token and will
  7064. in addition hold the flags which were passed into the
  7065. Init_sec_context call. The token returned by Init_sec_context
  7066. will be the DASS token included in the GSSAPI token "wrapper".
  7067. The DASS token will include the optional principal name.
  7068.  
  7069. If mutual authentication is not requested in the GSSAPI call, the
  7070. mutual authentication token returned by DASS will be ignored and
  7071. the initial call will return a COMPLETE status. If mutual
  7072. authentication is requested, the mutual authentication token will
  7073. be stored in the context information and a CONTINUE_NEEDED status
  7074. returned.
  7075.  
  7076. On the second call to GSS_Init_sec_context (with
  7077. input_context_handle non-zero), the returned token will be compared
  7078. to the one in the context information using the
  7079. Compare_mutual_token procedure and a COMPLETE status will be
  7080. returned if they match.
  7081.  
  7082. B.2.2.4 GSS_Accept_sec_context
  7083.  
  7084. This routine in GSSAPI accepts an incoming token and creates a
  7085. context.  It combines the effects of a series of DASS functions.
  7086. It could be implemented as follows:
  7087.  
  7088.  - Remove the GSSAPI "wrapper" from the incoming token and pass
  7089.    the rest and the credentials to "Accept_token".  Accept_token
  7090.    produces a mutual authentication token and a new credentials
  7091.    structure.  If delegation was requested, the new credentials
  7092.    structure will be an output of GSS_Accept_sec_context.  In any
  7093.    case, it will be used in the subsequent steps of this
  7094.    procedure.
  7095.  
  7096.  - Use the DASS Get_principal_name function to extract the
  7097.  
  7098.  
  7099.  
  7100.  
  7101.  
  7102.  
  7103.  Kaufman           Document Expiration: 10 June 1993      Page 111
  7104.  
  7105.  
  7106.  
  7107.  
  7108.  Internet Draft                    DASS            9 December 1992
  7109.  
  7110.  
  7111.  
  7112.  
  7113.    principal name from the credentials produced by Accept_token.
  7114.    This name is one of the outputs of "GSS_Accept_sec_context.
  7115.  
  7116.  - Apply the DASS Verify_principal_name to the new credentials
  7117.    and the retrieved name to authenticate the token as having
  7118.    come from the named principal.
  7119.  
  7120.  - Create and populate a context structure with the key and
  7121.    timestamp returned by Accept_token and a status of COMPLETE.
  7122.    Return a handle to that context.
  7123.  - If delegation was requested, return the new credentials from
  7124.    GSS_Accept_sec_context.  Otherwise, call Delete_credentials.
  7125.  
  7126.  - If mutual authentication was requested, wrap the mutual
  7127.    authentication token from Accept_token in a GSSAPI "wrapper"
  7128.    and return it.  Otherwise return a null string.
  7129.  
  7130. B.2.2.5 GSS_Delete_sec_context
  7131.  
  7132. This routine simply deletes the context state.  No calls to DASS
  7133. are required.
  7134.  
  7135. B.2.2.6 GSS_Sign
  7136.  
  7137. This routine takes as input a context handle and a message. It
  7138. creates a per_msg_token by computing a digital signature on the
  7139. message using the key and timestamp in the context block.  No
  7140. DASS services are required. If additional cryptographic services
  7141. were requested (replay detection or sequencing), a timestamp or
  7142. sequence number must be prepended to the message and sent with
  7143. the signature.  The syntax for this message is listed in section
  7144. C.3.
  7145.  
  7146. B.2.2.7 GSS_Verify
  7147.  
  7148. This routine repeats the calculation of the sign routine and
  7149. verifies the signature provided. If replay detection or sequencing
  7150. services are provided, the context must maintain as part of its
  7151. state information containing the sequence numbers or timestamps
  7152. of messages already received and this one must be checked for
  7153. acceptability.
  7154.  
  7155. B.2.2.8 GSS_Seal
  7156.  
  7157. This routine performs the same functions as Sign but also
  7158. optionally encrypts the message for privacy using the shared key
  7159. and encapsulates the whole thing in a GSSAPI specified ASN.1
  7160. wrapper.
  7161.  
  7162.  
  7163.  
  7164.  
  7165.  
  7166.  
  7167.  Kaufman           Document Expiration: 10 June 1993      Page 112
  7168.  
  7169.  
  7170.  
  7171.  
  7172.  Internet Draft                    DASS            9 December 1992
  7173.  
  7174.  
  7175.  
  7176.  
  7177. B.2.2.9 GSS_Unseal
  7178.  
  7179. This routine performs the same functions as GSS_Verify but also
  7180. parses the data structure including the signature and message and
  7181. decrypts the message if necessary.
  7182.  
  7183. B.3 Syntax
  7184.  
  7185. The GSSAPI specification recommends the following ASN.1 encoding
  7186. for the tokens and messages generated through the GSSAPI:
  7187.      --optional top-level token definitions to frame
  7188.      -- different mechanisms
  7189.  
  7190.      GSSAPI DEFINITIONS ::=
  7191.      BEGIN
  7192.  
  7193.      MechType ::= OBJECT IDENTIFIER
  7194.      -- data structure definitions
  7195.      ContextToken ::=
  7196.      -- option indication (delegation, etc.) indicated
  7197.      -- within mechanism-specific token
  7198.      [APPLICATION 0] IMPLICIT SEQUENCE {
  7199.           thisMech MechType,
  7200.           responseExpected BOOLEAN,
  7201.           innerContextToken ANY DEFINED BY MechType
  7202.             -- contents mechanism-specific
  7203.           }
  7204.  
  7205.      PerMsgToken ::=
  7206.      -- as emitted by GSS_Sign and processed by
  7207.      -- GSS_Verify
  7208.      [APPLICATION 1] IMPLICIT SEQUENCE {
  7209.           thisMech MechType,
  7210.           innerMsgToken ANY DEFINED BY MechType
  7211.             -- contents mechanism-specific
  7212.           }
  7213.      SealedMessage ::=
  7214.      -- as emitted by GSS_Seal and processed by
  7215.      -- GSS_Unseal
  7216.      [APPLICATION 2] IMPLICIT SEQUENCE {
  7217.           sealingToken PERMSGTOKEN,
  7218.           confFlag BOOLEAN,
  7219.           userData OCTET STRING
  7220.             -- encrypted if confFlag TRUE
  7221.           }
  7222.  
  7223. The object identifier for the DASS MechType is 1.3.12.2.1011.7.5.
  7224.  
  7225.  
  7226.  
  7227.  
  7228.  
  7229.  
  7230.  
  7231.  Kaufman           Document Expiration: 10 June 1993      Page 113
  7232.  
  7233.  
  7234.  
  7235.  
  7236.  Internet Draft                    DASS            9 December 1992
  7237.  
  7238.  
  7239.  
  7240.  
  7241. The innerContextToken of a token is a DASS token or mutual
  7242. authentication token.
  7243.  
  7244. The innerMsgToken is a null string in the case where the message
  7245. is encrypted and the token is included as part of a
  7246. SealedMessage.  Otherwise, it is an eight octet sequence computed
  7247. as the CBC residue computed using a key and string of bytes
  7248. defined as follows:
  7249.  
  7250.  - Pad the message provided by the application with 1-8 bytes of
  7251.    pad to produce a string whose length is a multiple of 8
  7252.    octets.  Each pad byte has a value equal to the number of pad
  7253.    bytes.
  7254.  - Compute the key by taking the timestamp of the association
  7255.    (two four byte integers laid out in big endian order with the
  7256.    most significant integer first), complementing the high order
  7257.    bit (to avoid aliasing with mutual authenticators), and
  7258.    encrypting the block in ECB mode with the shared key of the
  7259.    association.
  7260.  
  7261. The userData field of a SealedMessage is exactly the application
  7262. provided byte string if confFlag=FALSE.  Otherwise, it is the
  7263. application supplied message encrypted as follows:
  7264.  
  7265.  - Pad the message provided by the application with 1-8 bytes of
  7266.    pad to produce a string whose length = 4 (mod 8).  Each pad
  7267.    byte has a value equal to the number of pad bytes.
  7268.  
  7269.  - Append a four byte CRC32 computed over the message + pad.
  7270.  
  7271.  - Compute a key by taking the timestamp of the association (two
  7272.    four byte integers laid out in big endian order with the most
  7273.    significant integer first), complementing the high order bit
  7274.    (to avoid aliasing with mutual authenticators), and encrypting
  7275.    the block in ECB mode with the shared key of the association.
  7276.  
  7277.  - Encrypt the message + pad + CRC32 using CBC and the key
  7278.    computed in the previous step.
  7279.  
  7280. A note of the logic behind the above:
  7281.  
  7282.  - Because the shared key of an association may be reused by many
  7283.    associations between the same pair of principals, it is
  7284.    necessary to bind the association timestamp into the messages
  7285.    somehow to prevent messages from a previous association being
  7286.    replayed into a new sequence.  The technique above of
  7287.    generating an association key accomplishes this and has a side
  7288.    benefit.  An implementation may with to keep the long term
  7289.  
  7290.  
  7291.  
  7292.  
  7293.  
  7294.  
  7295.  Kaufman           Document Expiration: 10 June 1993      Page 114
  7296.  
  7297.  
  7298.  
  7299.  
  7300.  Internet Draft                    DASS            9 December 1992
  7301.  
  7302.  
  7303.  
  7304.  
  7305.    keys out of the hands of applications for purposes of
  7306.    confinement but may wish to put the encryption associated with
  7307.    an association in process context for reasons of performance.
  7308.    Defining an association key makes that possible.
  7309.  
  7310.  - The reason that the association specific key is not specified
  7311.    as the output of Create_token and Accept_token is that the DCE
  7312.    RPC security implementation requires that a series of
  7313.    associations between two principals always have the same key
  7314.    and we did not want to have to support a different interface
  7315.    in that application.
  7316.  
  7317.  - The CRC32 after pad constitutes a cheap integrity check when
  7318.    data is encrypted.
  7319.  - The fact that padding is done differently for encrypted and
  7320.    signed messages means that there are no threats related to
  7321.    sending the same message encrypted and unencrypted and using
  7322.    the last block of the encrypted message as a signature on the
  7323.    unencrypted one.
  7324.  
  7325.  
  7326.  
  7327.  
  7328.  
  7329.  
  7330.  
  7331.  
  7332.  
  7333.  
  7334.  
  7335.  
  7336.  
  7337.  
  7338.  
  7339.  
  7340.  
  7341.  
  7342.  
  7343.  
  7344.  
  7345.  
  7346.  
  7347.  
  7348.  
  7349.  
  7350.  
  7351.  
  7352.  
  7353.  
  7354.  
  7355.  
  7356.  
  7357.  
  7358.  
  7359.  Kaufman           Document Expiration: 10 June 1993      Page 115
  7360.  
  7361.  
  7362.  
  7363.  
  7364.  Internet Draft                    DASS            9 December 1992
  7365.  
  7366.  
  7367.  
  7368.  
  7369.                              Annex C
  7370.                     Imported ASN.1 definitions
  7371.  
  7372. This annex contains extracts from the ASN.1 description of X.509
  7373. and X.500 definitions referenced by the DASS ASN.1 definitions.
  7374.  
  7375. CCITT DEFINITIONS ::=
  7376.  
  7377. BEGIN
  7378. joint-iso-ccitt          OBJECT IDENTIFIER ::= {2}
  7379. ds                       OBJECT IDENTIFIER ::= {joint-iso-ccitt 5}
  7380. algorithm                OBJECT IDENTIFIER ::= {ds 8}
  7381.  
  7382. iso                      OBJECT IDENTIFIER ::= {1}
  7383. identified-organization  OBJECT IDENTIFIER ::= {iso 3}
  7384. ecma            OBJECT IDENTIFIER ::= {identified-organization 12}
  7385. digital                  OBJECT IDENTIFIER ::= { ecma 1011 }
  7386.  
  7387. -- X.501 definitions
  7388.  
  7389. AttributeType ::= OBJECT IDENTIFIER
  7390. AttributeValue ::= ANY
  7391.         -- useful ones are
  7392.                 --      OCTET STRING ,
  7393.                 --      PrintableString ,
  7394.                 --      NumericString ,
  7395.                 --      T61String ,
  7396.                 --      VisibleString
  7397.  
  7398. AttributeValueAssertion ::= SEQUENCE {AttributeType,
  7399.                                               AttributeValue}
  7400.  
  7401. Name ::= CHOICE {-- only one possibility for now --
  7402.                 RDNSequence}
  7403.  
  7404. RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
  7405. DistinguishedName ::= RDNSequence
  7406.  
  7407. RelativeDistinguishedName ::= SET OF AttributeValueAssertion
  7408.  
  7409. -- X.509 definitions
  7410.  
  7411. Certificate ::= SIGNED SEQUENCE {
  7412.                 version [0]             Version DEFAULT 1988 ,
  7413.                 serialNumber            SerialNumber ,
  7414.                 signature               AlgorithmIdentifier ,
  7415.                 issuer                  Name,
  7416.                 valid                   Validity,
  7417.                 subject                 Name,
  7418.                 subjectPublicKey        SubjectPublicKeyInfo }
  7419.  
  7420.  
  7421.  
  7422.  
  7423.  Kaufman           Document Expiration: 10 June 1993      Page 116
  7424.  
  7425.  
  7426.  
  7427.  
  7428.  Internet Draft                    DASS            9 December 1992
  7429.  
  7430.  
  7431.  
  7432.  
  7433. Version ::=      INTEGER { 1988(0)}
  7434. SerialNumber ::= INTEGER
  7435. Validity ::=     SEQUENCE{
  7436.         notBefore               UTCTime,
  7437.         notAfter                UTCTime}
  7438.  
  7439. SubjectPublicKeyInfo  ::=  SEQUENCE {
  7440.         algorithm               AlgorithmIdentifier ,
  7441.         subjectPublicKey        BIT STRING
  7442.         }
  7443.  
  7444. AlgorithmIdentifier ::= SEQUENCE {
  7445.         algorithm       OBJECT IDENTIFIER ,
  7446.                     parameters ANY DEFINED BY algorithm OPTIONAL}
  7447.  
  7448. ALGORITHM MACRO
  7449. BEGIN
  7450. TYPE NOTATION   ::= "PARAMETER" type
  7451. VALUE NOTATION  ::= value (VALUE OBJECT IDENTIFIER)
  7452. END -- of ALGORITHM
  7453.  
  7454. ENCRYPTED MACRO
  7455. BEGIN
  7456. TYPE NOTATION   ::=type(ToBeEnciphered)
  7457. VALUE NOTATION  ::= value(VALUE BIT STRING)
  7458.         -- the value of the bit string is generated by
  7459.         -- taking the octets which form the complete
  7460.         -- encoding (using the ASN.1 Basic Encoding Rules)
  7461.         -- of the value of the ToBeEnciphered type and
  7462.         -- applying an encipherment procedure to those octets--
  7463. END
  7464.  
  7465. SIGNED MACRO    ::=
  7466. BEGIN
  7467. TYPE NOTATION   ::= type (ToBeSigned)
  7468. VALUE NOTATION  ::= value(VALUE
  7469. SEQUENCE{
  7470.         ToBeSigned,
  7471.         AlgorithIdentifier, -- of the algorithm used to generate
  7472.                             -- the signature
  7473.         ENCRYPTED OCTET STRING
  7474.         -- where the octet string is the result
  7475.         -- of the hashing of the value of "ToBeSigned"
  7476. END -- of SIGNED
  7477.  
  7478.  
  7479.  
  7480.  
  7481.  
  7482.  
  7483.  
  7484.  
  7485.  
  7486.  
  7487.  Kaufman           Document Expiration: 10 June 1993      Page 117
  7488.  
  7489.  
  7490.  
  7491.  
  7492.  Internet Draft                    DASS            9 December 1992
  7493.  
  7494.  
  7495.  
  7496.  
  7497. SIGNATURE MACRO ::=
  7498. BEGIN
  7499. TYPE NOTATION   ::= type(OfSignature)
  7500. VALUE NOTATION  ::= value(VALUE
  7501.         SEQUENCE{
  7502.                 AlgorithmIdentifier,
  7503.                 -- of the algorithm used to compute the signature
  7504.                 ENCRYPTED OCTET STRING
  7505.                 -- where the octet string is a function (e.g. a
  7506.                 -- compressed or hashed version) of the value 
  7507.                 -- "OfSignature", which may include the identifier
  7508.                 -- of the algorithm used to compute
  7509.                 -- the signature--}
  7510.                         )
  7511. END -- of SIGNATURE
  7512.  
  7513. -- X.509 Annex H (not part of the standard)
  7514.  
  7515. encryptionAlgorithm OBJECT IDENTIFIER ::= {algorithm 1}
  7516. rsa ALGORITHM
  7517.         PARAMETER KeySize
  7518.         ::= {encryptionAlgorithm 1}
  7519.  
  7520. KeySize ::= INTEGER
  7521.  
  7522. END
  7523.  
  7524.  
  7525.  
  7526.  
  7527.  
  7528.  
  7529.  
  7530.  
  7531.  
  7532.  
  7533.  
  7534.  
  7535.  
  7536.  
  7537.  
  7538.  
  7539.  
  7540.  
  7541.  
  7542.  
  7543.  
  7544.  
  7545.  
  7546.  
  7547.  
  7548.  
  7549.  
  7550.  
  7551.  Kaufman           Document Expiration: 10 June 1993      Page 118
  7552.  
  7553.  
  7554.  
  7555.  
  7556.  Internet Draft                    DASS            9 December 1992
  7557.  
  7558.  
  7559.  
  7560.  
  7561. Glossary
  7562.  
  7563.  
  7564. authentication           The process of determining the identity
  7565.      (usually the name) of the other party in some communication
  7566.      exchange.
  7567.  
  7568. authentication context
  7569.      Cached information used during a particular instance of
  7570.      authentication and including a shared symmetric (DES) key as
  7571.      well as components of the authentication token conveyed
  7572.      during establishment of this context.
  7573.  
  7574. authentication token
  7575.      Information conveyed during a strong authentication exchange
  7576.      that can be used to authenticate its sender. An
  7577.      authentication token can, but is not necessarily limited to,
  7578.      include the claimant identity and ticket, as well as signed
  7579.      and encrypted secret key exchange messages conveying a
  7580.      secret key to be used in future cryptographic operations. An
  7581.      authentication token names a particular protocol data
  7582.      structure component.
  7583.  
  7584. authorization            The process of determining the rights
  7585.      associated with a particular principal.
  7586.  
  7587. certificate  The public key of a particular principal, together
  7588.      with some other information relating to the names of the
  7589.      principal and the certifying authority, rendered unforgeable
  7590.      by encipherment with the private key of the certification
  7591.      authority that issued it.
  7592.  
  7593. certification authority
  7594.      An authority trusted by one or more principals to create and
  7595.      assign certificates.
  7596.  
  7597. claimant     The party that initiates the authentication process.
  7598.      In the DASS architecture, claimants possess credentials
  7599.      which include their identity, authenticating private key and
  7600.      a ticket certifying their authenticating public key.
  7601.  
  7602. credentials  Information "state" required by principals in order
  7603.      to for them to authenticate.   Credentials may contain
  7604.      information used to initiate the authentication process
  7605.      (claimant information), information used to respond to an
  7606.      authentication request (verifier information), and cached
  7607.      information useful in improving performance.
  7608.  
  7609.  
  7610.  
  7611.  
  7612.  
  7613.  
  7614.  
  7615.  Kaufman           Document Expiration: 10 June 1993      Page 119
  7616.  
  7617.  
  7618.  
  7619.  
  7620.  Internet Draft                    DASS            9 December 1992
  7621.  
  7622.  
  7623.  
  7624.  
  7625. cryptographic checksum
  7626.      Information which is derived by performing a cryptographic
  7627.      transformation on the data unit. This information can be
  7628.      used by the receiver to verify the authenticity of data
  7629.      passed in cleartext
  7630.  
  7631. decipher     To reverse the effects of encipherment and render a
  7632.      message comprehensible by use of a cryptographic key.
  7633.  
  7634. delegation   The granting of temporary credentials that allow a
  7635.      process to act on behalf of a principal.
  7636.  
  7637. delegation key            A short term public/private key pair
  7638.      used by a claimant to act on behalf of a principal for a
  7639.      bounded period. The delegation public key appears in the
  7640.      ticket, whereas the delegation private key is used to sign
  7641.      secret key exchange messages.
  7642.  
  7643. DES          Data Encryption Standard: a symmetric (secret key)
  7644.      encryption algorithm used by DASS. An alternate encryption
  7645.      algorithm could be substituted with little or no disruption
  7646.      to the architecture.
  7647.  
  7648. DES key      A 56-bit secret quantity used as a parameter to the
  7649.      DES encryption algorithm.
  7650.  
  7651. digital signature        A value computed from a block of data
  7652.      and a key which could only be computed by someone knowing
  7653.      the key. A digital signature computed with a secret key can
  7654.      only be verified by someone knowing that secret key.  A
  7655.      digital signature computed with a private key can be
  7656.      verified by anyone knowing the corresponding public key.
  7657.  
  7658. encipher     To render incomprehensible except to the holder of a
  7659.      particular key. If you encipher with a secret key, only the
  7660.      holder of the same secret can decipher the message. If you
  7661.      encipher with a public key, only the holder of the
  7662.      corresponding private key can decipher it.
  7663.  
  7664. initial trust certificate
  7665.      A certificate signed by a principal for its own use which
  7666.      states the name and public key of a trusted authority.
  7667.  
  7668. global user name         A hierarchical name for a user which is
  7669.      unique within the entire domain of discussion (typically the
  7670.      network).
  7671.  
  7672.  
  7673.  
  7674.  
  7675.  
  7676.  
  7677.  
  7678.  
  7679.  Kaufman           Document Expiration: 10 June 1993      Page 120
  7680.  
  7681.  
  7682.  
  7683.  
  7684.  Internet Draft                    DASS            9 December 1992
  7685.  
  7686.  
  7687.  
  7688. local user name            A simple (non-hierarchical) name by
  7689.      which a user is known within a limited context such as on a
  7690.      single computer.
  7691.  
  7692. principal    Abstract entity which can be authenticated by name.
  7693.      In DASS there are user principals and server principals.
  7694.  
  7695. private key  Cryptographic key used in asymmetric (public key)
  7696.      cryptography to decrypt and/or sign messages. In asymmetric
  7697.      cryptography, knowing the encryption key is independent of
  7698.      knowing the decryption key. The decryption (or signing)
  7699.      private key cannot be derived from the encrypting (or
  7700.      verifying) public key.
  7701.  
  7702. proxy        A mapping from an external name to a local account
  7703.      name for purposes of establishing a set of local access
  7704.      rights. Note that this differs from the definition in ECMA
  7705.      TR/46.
  7706.  
  7707. public key   Cryptographic key used in asymmetric cryptography to
  7708.      encrypt messages and/or verify signatures.
  7709.  
  7710. RSA          The Rivest-Shamir-Adelman public key cryptosystem
  7711.      based on modular exponentiation where the modulus is the
  7712.      product of two large primes.  When the term RSA key is used,
  7713.      it should be clear from context whether the public key, the
  7714.      private key, or the public/private pair is intended.
  7715.  
  7716. secret key   Cryptographic key used in symmetric cryptography to
  7717.      encrypt, sign, decrypt and verify messages. In symmetric
  7718.      cryptography, knowledge of the decryption key implies
  7719.      knowledge of the encryption key, and vice-versa.
  7720.  
  7721. sign         A process which takes a piece of data and a key and
  7722.      produces a digital signature which can only be calculated by
  7723.      someone with the key. The holder of a corresponding key can
  7724.      verify the signature.
  7725.  
  7726. source       The initiator of an authentication exchange.
  7727.  
  7728. strong authentication
  7729.      Authentication by means of cryptographically derived
  7730.      authentication tokens and credentials. The actual working
  7731.      definition is closer to that of "zero knowledge" proof:
  7732.      authentication so as to not reveal any information usable by
  7733.      either the verifier, or by an eavesdropping third party, to
  7734.      further their potential ability to impersonate the claimant.
  7735.  
  7736.  
  7737.  
  7738.  
  7739.  
  7740.  
  7741.  
  7742.  
  7743.  Kaufman           Document Expiration: 10 June 1993      Page 121
  7744.  
  7745.  
  7746.  
  7747.  
  7748.  Internet Draft                    DASS            9 December 1992
  7749.  
  7750.  
  7751.  
  7752.  
  7753. target       The intended second party (other than the source) to
  7754.      an authentication exchange.
  7755.  
  7756. ticket        A data structure certifying an authenticating
  7757.      (public) key by virtue of being signed by a user principal
  7758.      using their (long term) private key. The ticket also
  7759.      includes the UID of the principal.
  7760.  
  7761. trusted authority         The public key, name and UID of a
  7762.      certification authority trusted in some context to certify
  7763.      the public keys of other principals.
  7764.  
  7765. UID          A 128 bit unique identifier produced according to OSF
  7766.      standard specifications.
  7767.  
  7768. user key      A "long term" RSA key whose private portion
  7769.      authenticates its holder as having the access rights of a
  7770.      particular person.
  7771.  
  7772. verify       To cryptographically process a piece of data and a
  7773.      digital signature to determine that the holder of a
  7774.      particular key signed the data.
  7775.  
  7776. verifier     The party who will perform the operations necessary
  7777.      to verify the claimed identity of a claimant.
  7778.  
  7779.  
  7780.  
  7781.  
  7782.  
  7783.  
  7784.  
  7785.  
  7786. Author's Address
  7787.     Charles Kaufman
  7788.     Digital Equipment Corporation
  7789.     LKG 1-2/A19
  7790.     550 King Street
  7791.     Littleton, MA 01460
  7792.  
  7793.     Phone: (508) 486-7329
  7794.  
  7795.     Email: kaufman@dsmail.enet.dec.com
  7796.  
  7797.  
  7798.     General comments on this document should be sent to
  7799.     cat-ietf@mit.edu.  Minor corrections should be sent to the
  7800.     author.
  7801.  
  7802.  
  7803.  
  7804.  
  7805.  
  7806.  
  7807.  Kaufman           Document Expiration: 10 June 1993      Page 122
  7808.